{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-09-14T11:03:05.702189Z",
     "start_time": "2025-09-14T11:03:05.698380Z"
    }
   },
   "source": "print(\"hello world\")",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello world\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-21T16:36:56.485976Z",
     "start_time": "2025-09-21T16:36:56.433225Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# s = pd.Series([1,2,3,4,5], index=['a','b','c','d','e'], name='s')\n",
    "dic = {\"a\" : 4, \"b\" : 5, \"c\" : 6}\n",
    "s  = pd.Series(dic, name='s')\n",
    "s.index\n",
    "s.values\n",
    "s.ndim\n",
    "s.shape\n",
    "s.size\n",
    "s.dtype\n",
    "s.dtypes\n",
    "s.name\n",
    "s.loc['a':'b']\n",
    "s.iloc[0:2]\n",
    "s.at['a']\n",
    "s.iat[0]\n",
    "s.hist\n",
    "s.describe()\n",
    "s.hist()\n",
    "print(s.sample())\n",
    "s.to_frame()"
   ],
   "id": "9e1d6f0c265de562",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "c    6\n",
      "Name: s, dtype: int64\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "   s\n",
       "a  4\n",
       "b  5\n",
       "c  6"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>s</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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+zVs2DBt375d+fn5wfaFCxdq1apV2rNnT7fH+OMf/6hHH31Uu3fv1llnnRWxT2VlpebPnx/WXlNTo7S0tGiHCwAALDp48KCKi4t14MABpaend9rP0Z2RAJfLFbJtjAlri2TNmjWqrKzU3/72t06DiCTNnTtXFRUVwe22tjZlZmaqsLCwy2Kc8vv98nq9+t3OJPk6uh9/rPiocmLUfQM1FhQUyO129+Oo7KC++Jfo6/BkmsNErdFpfdmV8fVLGp4ko4dzO/pl/gJPNrrjKIwMHjxYycnJam5uDmlvaWnRkCFDutx37dq1Kikp0csvv6xrr722y74ej0cejyes3e1298uF7utwyXckfv4R7Mk56K9zFyuoL/4l+jo8GeYw0WuMtr54uo6P1R/zF+3xHH2AdcCAAcrJyZHX6w1p93q9IY9tjrdmzRpNnz5dNTU1uuGGG5y8JQAASHCOH9NUVFRo6tSpys3NVV5enpYvX67GxkaVlZVJOvqI5csvv9Tq1aslHQ0i06ZN05NPPqmrrroqeFfllFNO0emnn96HpQAAgHjkOIxMmTJFra2tWrBggZqampSdna3a2loNHz5cktTU1BTyN0eeffZZHT58WHfffbfuvvvuYPvtt9+ulStX9r4CAAAQ13r0Adby8nKVl5dHfO34gLF58+aevAUAADhJ8N00AADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArOpRGFm6dKmysrKUmpqqnJwcbdu2rcv+W7ZsUU5OjlJTU3X++edr2bJlPRosAABIPI7D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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 58
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-21T17:07:32.967525Z",
     "start_time": "2025-09-21T17:07:32.918908Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import os\n",
    "\n",
    "df = pd.DataFrame(data={\n",
    "    'name' : ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],\n",
    "    'age' : [24, 27, 22, 32, 29],\n",
    "    'city' : ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix']}\n",
    ", columns=['name', 'city', 'age'], index=[101, 102, 103, 104, 105])\n",
    "df.T\n",
    "df.columns\n",
    "df.index\n",
    "df.ndim\n",
    "df.shape\n",
    "df.size\n",
    "df.loc[101:103, ['name', 'age']]\n",
    "df.info()\n",
    "df.describe()\n",
    "df.count()\n",
    "df.value_counts()\n",
    "df.nlargest(3, 'age')\n",
    "df.cummax()\n",
    "df['age'].median()\n",
    "\n",
    "df['age'] > 25\n",
    "df[df['age'] > 25]\n",
    "df * 2\n",
    "# df.set_index(\"age\", inplace=True)\n",
    "# df\n",
    "df.index = [\"Ⅰ\", \"Ⅱ\", \"Ⅲ\", \"Ⅳ\", \"Ⅴ\"]\n",
    "df\n",
    "df['phone'] = ['123-456-7890', '234-567-8901', '345-678-9012', '456-789-0123', '567-890-1234']\n",
    "df\n",
    "\n",
    "os.makedirs(\"data\", exist_ok=True)\n",
    "df = pd.DataFrame({\"age\": [20, 30, 40, 10], \"name\": [\"张三\", \"李四\", \"王五\", \"赵六\"], \"id\": [101, 102, 103, 104]})\n",
    "df.set_index(\"id\", inplace=True)\n",
    "\n",
    "df.to_csv(\"data/df.csv\")\n",
    "df.to_csv(\"data/df.tsv\", sep=\"\\t\")  # 设置分隔符为 \\t\n",
    "df.to_csv(\"data/df_noindex.csv\", index=False)  # index=False 不保存行索引\n",
    "df.to_pickle(\"data/df.pkl\")\n",
    "df.to_excel(\"data/df.xlsx\")\n",
    "df.to_clipboard()\n",
    "df_dict = df.to_dict()\n",
    "# df.to_hdf(\"data/df.h5\", key=\"df\")\n",
    "df.to_html(\"data/df.html\")\n",
    "df.to_json(\"data/df.json\")\n",
    "df.to_feather(\"data/df.feather\")\n",
    "\n",
    "df_csv = pd.read_csv(\"data/df.csv\", index_col=\"id\")  # 指定行索引\n",
    "df_tsv = pd.read_csv(\"data/df.tsv\", sep=\"\\t\")  # 指定分隔符\n",
    "df_pkl = pd.read_pickle(\"data/df.pkl\")\n",
    "df_excel = pd.read_excel(\"data/df.xlsx\", index_col=\"id\")\n",
    "df_clipboard = pd.read_clipboard(index_col=\"id\")\n",
    "df_from_dict = pd.DataFrame(df_dict)\n",
    "# df_hdf = pd.read_hdf(\"data/df.h5\", key=\"df\")\n",
    "df_html = pd.read_html(\"data/df.html\", index_col=0)[0]\n",
    "df_json = pd.read_json(\"data/df.json\")\n",
    "df_feather = pd.read_feather(\"data/df.feather\")\n",
    "\n",
    "print(df_csv)\n",
    "print(df_tsv)\n",
    "print(df_pkl)\n",
    "print(df_excel)\n",
    "print(df_clipboard)\n",
    "print(df_from_dict)\n",
    "# print(df_hdf)\n",
    "print(df_html)\n",
    "print(df_json)\n",
    "print(df_feather)\n"
   ],
   "id": "9e76a1cf0221d63f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 5 entries, 101 to 105\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count  Dtype \n",
      "---  ------  --------------  ----- \n",
      " 0   name    5 non-null      object\n",
      " 1   city    5 non-null      object\n",
      " 2   age     5 non-null      int64 \n",
      "dtypes: int64(1), object(2)\n",
      "memory usage: 332.0+ bytes\n",
      "     age name\n",
      "id           \n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n",
      "    id  age name\n",
      "0  101   20   张三\n",
      "1  102   30   李四\n",
      "2  103   40   王五\n",
      "3  104   10   赵六\n",
      "     age name\n",
      "id           \n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n",
      "     age name\n",
      "id           \n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n",
      "     age name\n",
      "id           \n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n",
      "     age name\n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n",
      "                   age               name\n",
      "id  Unnamed: 1_level_1 Unnamed: 2_level_1\n",
      "101                 20             å¼ ä¸\n",
      "102                 30             æå\n",
      "103                 40             çäº\n",
      "104                 10             èµµå­\n",
      "     age name\n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n",
      "     age name\n",
      "id           \n",
      "101   20   张三\n",
      "102   30   李四\n",
      "103   40   王五\n",
      "104   10   赵六\n"
     ]
    }
   ],
   "execution_count": 108
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-21T17:19:33.349815Z",
     "start_time": "2025-09-21T17:19:33.338310Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "df = pd.DataFrame({\"gmv\":[100,200,300,400],\"trade_date\":[\"2025-01-06\",\"2023-10-31\",\"2023-12-31\",\"2023-01-05\"]})\n",
    "df['ymd'] = pd.to_datetime(df['trade_date'])\n",
    "print(df)\n",
    "df['ymd'].dt.day\n",
    "df['yy'],df['mm'],df['dd']=df['ymd'].dt.year,df['ymd'].dt.month,df['ymd'].dt.day\n",
    "print(df)\n",
    "df['ymd'].dtype\n",
    "df['week']=df['ymd'].dt.day_name()\n",
    "print(df)\n",
    "df['quarter']=df['ymd'].dt.quarter\n",
    "print(df)\n",
    "df['mend']=df['ymd'].dt.is_month_end\n",
    "df['yend']=df['ymd'].dt.is_year_end\n",
    "print(df)\n",
    "df[\"ystat\"] = df[\"ymd\"].dt.to_period(\"Y\")\n",
    "df[\"mstat\"] = df[\"ymd\"].dt.to_period(\"M\")\n",
    "df[\"qstat\"] = df[\"ymd\"].dt.to_period(\"Q\")\n",
    "df[\"wstat\"] = df[\"ymd\"].dt.to_period(\"W\")\n",
    "print(df)\n",
    "\n"
   ],
   "id": "1a045ef4e670f1dd",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   gmv  trade_date        ymd\n",
      "0  100  2025-01-06 2025-01-06\n",
      "1  200  2023-10-31 2023-10-31\n",
      "2  300  2023-12-31 2023-12-31\n",
      "3  400  2023-01-05 2023-01-05\n",
      "   gmv  trade_date        ymd    yy  mm  dd\n",
      "0  100  2025-01-06 2025-01-06  2025   1   6\n",
      "1  200  2023-10-31 2023-10-31  2023  10  31\n",
      "2  300  2023-12-31 2023-12-31  2023  12  31\n",
      "3  400  2023-01-05 2023-01-05  2023   1   5\n",
      "   gmv  trade_date        ymd    yy  mm  dd      week\n",
      "0  100  2025-01-06 2025-01-06  2025   1   6    Monday\n",
      "1  200  2023-10-31 2023-10-31  2023  10  31   Tuesday\n",
      "2  300  2023-12-31 2023-12-31  2023  12  31    Sunday\n",
      "3  400  2023-01-05 2023-01-05  2023   1   5  Thursday\n",
      "   gmv  trade_date        ymd    yy  mm  dd      week  quarter\n",
      "0  100  2025-01-06 2025-01-06  2025   1   6    Monday        1\n",
      "1  200  2023-10-31 2023-10-31  2023  10  31   Tuesday        4\n",
      "2  300  2023-12-31 2023-12-31  2023  12  31    Sunday        4\n",
      "3  400  2023-01-05 2023-01-05  2023   1   5  Thursday        1\n",
      "   gmv  trade_date        ymd    yy  mm  dd      week  quarter   mend   yend\n",
      "0  100  2025-01-06 2025-01-06  2025   1   6    Monday        1  False  False\n",
      "1  200  2023-10-31 2023-10-31  2023  10  31   Tuesday        4   True  False\n",
      "2  300  2023-12-31 2023-12-31  2023  12  31    Sunday        4   True   True\n",
      "3  400  2023-01-05 2023-01-05  2023   1   5  Thursday        1  False  False\n",
      "   gmv  trade_date        ymd    yy  mm  dd      week  quarter   mend   yend  \\\n",
      "0  100  2025-01-06 2025-01-06  2025   1   6    Monday        1  False  False   \n",
      "1  200  2023-10-31 2023-10-31  2023  10  31   Tuesday        4   True  False   \n",
      "2  300  2023-12-31 2023-12-31  2023  12  31    Sunday        4   True   True   \n",
      "3  400  2023-01-05 2023-01-05  2023   1   5  Thursday        1  False  False   \n",
      "\n",
      "  ystat    mstat   qstat                  wstat  \n",
      "0  2025  2025-01  2025Q1  2025-01-06/2025-01-12  \n",
      "1  2023  2023-10  2023Q4  2023-10-30/2023-11-05  \n",
      "2  2023  2023-12  2023Q4  2023-12-25/2023-12-31  \n",
      "3  2023  2023-01  2023Q1  2023-01-02/2023-01-08  \n"
     ]
    }
   ],
   "execution_count": 120
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T06:47:13.921419Z",
     "start_time": "2025-09-28T06:47:13.833477Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "df = pd.read_csv(\"data/weather.csv\")\n",
    "print(df.head())\n",
    "df.shape\n",
    "df.columns\n",
    "print(df.dtypes)\n",
    "df.info()\n",
    "df.describe()\n",
    "df_date_series = df[\"date\"]  # 返回的是Series\n",
    "df_date_series\n",
    "df_date_dataframe = df[[\"date\"]]  # 返回的是DataFrame\n",
    "df_date_dataframe\n",
    "df[[\"date\", \"temp_max\", \"temp_min\"]]  # 获取多列数据\n",
    "df.loc[1]  # 获取行标签为1的数据\n",
    "df.loc[[1, 10, 100]]  # 获取行标签分别为1、10、100的数据\n",
    "df.iloc[0]  # 获取行位置为0的数据\n",
    "df.iloc[-1]  # 获取行位置为最后一位的数据\n",
    "df.loc[1, \"precipitation\"]  # 获取行标签为1，列标签为precipitation的数据\n",
    "df.loc[:, \"precipitation\"]  # 获取所有行，列标签为precipitation的数据\n",
    "df.iloc[:, [3, 5, -1]]  # 获取所有行，列位置为3，5，最后一位的数据\n",
    "df.iloc[:10, 2:6]  # 获取前10行，列位置为2、3、4、5的数据\n",
    "df.loc[:10, [\"date\", \"precipitation\", \"temp_max\", \"temp_min\"]]  # 通过行列标签获取数据\n",
    "\n",
    "df[\"month\"] = pd.to_datetime(df[\"date\"]).dt.to_period(\"M\").astype(str)\n",
    "\n",
    "month_temp_mean = df.groupby(\"month\")[[\"temp_max\", \"temp_min\"]].mean().plot()\n",
    "df.groupby(\"month\")[\"weather\"].nunique().plot()\n",
    "df.describe(include=[\"float64\"])"
   ],
   "id": "989b3003d6959f92",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         date  precipitation  temp_max  temp_min  wind  weather\n",
      "0  2012-01-01            0.0      12.8       5.0   4.7  drizzle\n",
      "1  2012-01-02           10.9      10.6       2.8   4.5     rain\n",
      "2  2012-01-03            0.8      11.7       7.2   2.3     rain\n",
      "3  2012-01-04           20.3      12.2       5.6   4.7     rain\n",
      "4  2012-01-05            1.3       8.9       2.8   6.1     rain\n",
      "date              object\n",
      "precipitation    float64\n",
      "temp_max         float64\n",
      "temp_min         float64\n",
      "wind             float64\n",
      "weather           object\n",
      "dtype: object\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1461 entries, 0 to 1460\n",
      "Data columns (total 6 columns):\n",
      " #   Column         Non-Null Count  Dtype  \n",
      "---  ------         --------------  -----  \n",
      " 0   date           1461 non-null   object \n",
      " 1   precipitation  1461 non-null   float64\n",
      " 2   temp_max       1461 non-null   float64\n",
      " 3   temp_min       1461 non-null   float64\n",
      " 4   wind           1461 non-null   float64\n",
      " 5   weather        1461 non-null   object \n",
      "dtypes: float64(4), object(2)\n",
      "memory usage: 68.6+ KB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "       precipitation     temp_max     temp_min         wind\n",
       "count    1461.000000  1461.000000  1461.000000  1461.000000\n",
       "mean        3.029432    16.439083     8.234771     3.241136\n",
       "std         6.680194     7.349758     5.023004     1.437825\n",
       "min         0.000000    -1.600000    -7.100000     0.400000\n",
       "25%         0.000000    10.600000     4.400000     2.200000\n",
       "50%         0.000000    15.600000     8.300000     3.000000\n",
       "75%         2.800000    22.200000    12.200000     4.000000\n",
       "max        55.900000    35.600000    18.300000     9.500000"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>precipitation</th>\n",
       "      <th>temp_max</th>\n",
       "      <th>temp_min</th>\n",
       "      <th>wind</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1461.000000</td>\n",
       "      <td>1461.000000</td>\n",
       "      <td>1461.000000</td>\n",
       "      <td>1461.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.029432</td>\n",
       "      <td>16.439083</td>\n",
       "      <td>8.234771</td>\n",
       "      <td>3.241136</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>6.680194</td>\n",
       "      <td>7.349758</td>\n",
       "      <td>5.023004</td>\n",
       "      <td>1.437825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-1.600000</td>\n",
       "      <td>-7.100000</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>10.600000</td>\n",
       "      <td>4.400000</td>\n",
       "      <td>2.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>15.600000</td>\n",
       "      <td>8.300000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>2.800000</td>\n",
       "      <td>22.200000</td>\n",
       "      <td>12.200000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>55.900000</td>\n",
       "      <td>35.600000</td>\n",
       "      <td>18.300000</td>\n",
       "      <td>9.500000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T06:50:14.643243Z",
     "start_time": "2025-09-28T06:50:14.597602Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/weather.csv\")\n",
    "df.nlargest(30, \"temp_max\")\n",
    "df.nlargest(30, \"temp_max\").nsmallest(5,  \"temp_min\")\n",
    "df[\"year\"] = pd.to_datetime(df[\"date\"]).dt.to_period(\"Y\").astype(str)  # 将date转换为 年 格式\n",
    "df_sort = df.sort_values([\"year\", \"temp_max\"], ascending=[True, False])  # 按照year和temp_max排序\n",
    "df_sort"
   ],
   "id": "db568653aa9ef71",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "            date  precipitation  temp_max  temp_min  wind weather  year\n",
       "228   2012-08-16            0.0      34.4      18.3   2.8     sun  2012\n",
       "216   2012-08-04            0.0      33.9      16.7   3.7     sun  2012\n",
       "217   2012-08-05            0.0      33.9      17.8   1.9     sun  2012\n",
       "229   2012-08-17            0.0      32.8      16.1   1.8     sun  2012\n",
       "250   2012-09-07            0.0      32.2      13.3   3.1     sun  2012\n",
       "...          ...            ...       ...       ...   ...     ...   ...\n",
       "1454  2015-12-25            5.8       5.0       2.2   1.5    rain  2015\n",
       "1457  2015-12-28            1.5       5.0       1.7   1.3    rain  2015\n",
       "1455  2015-12-26            0.0       4.4       0.0   2.5     sun  2015\n",
       "1456  2015-12-27            8.6       4.4       1.7   2.9    rain  2015\n",
       "1428  2015-11-29            0.0       1.7      -2.1   0.9     fog  2015\n",
       "\n",
       "[1461 rows x 7 columns]"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>precipitation</th>\n",
       "      <th>temp_max</th>\n",
       "      <th>temp_min</th>\n",
       "      <th>wind</th>\n",
       "      <th>weather</th>\n",
       "      <th>year</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>228</th>\n",
       "      <td>2012-08-16</td>\n",
       "      <td>0.0</td>\n",
       "      <td>34.4</td>\n",
       "      <td>18.3</td>\n",
       "      <td>2.8</td>\n",
       "      <td>sun</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>216</th>\n",
       "      <td>2012-08-04</td>\n",
       "      <td>0.0</td>\n",
       "      <td>33.9</td>\n",
       "      <td>16.7</td>\n",
       "      <td>3.7</td>\n",
       "      <td>sun</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>217</th>\n",
       "      <td>2012-08-05</td>\n",
       "      <td>0.0</td>\n",
       "      <td>33.9</td>\n",
       "      <td>17.8</td>\n",
       "      <td>1.9</td>\n",
       "      <td>sun</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>229</th>\n",
       "      <td>2012-08-17</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32.8</td>\n",
       "      <td>16.1</td>\n",
       "      <td>1.8</td>\n",
       "      <td>sun</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>250</th>\n",
       "      <td>2012-09-07</td>\n",
       "      <td>0.0</td>\n",
       "      <td>32.2</td>\n",
       "      <td>13.3</td>\n",
       "      <td>3.1</td>\n",
       "      <td>sun</td>\n",
       "      <td>2012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1454</th>\n",
       "      <td>2015-12-25</td>\n",
       "      <td>5.8</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2.2</td>\n",
       "      <td>1.5</td>\n",
       "      <td>rain</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1457</th>\n",
       "      <td>2015-12-28</td>\n",
       "      <td>1.5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1.7</td>\n",
       "      <td>1.3</td>\n",
       "      <td>rain</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1455</th>\n",
       "      <td>2015-12-26</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.4</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.5</td>\n",
       "      <td>sun</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1456</th>\n",
       "      <td>2015-12-27</td>\n",
       "      <td>8.6</td>\n",
       "      <td>4.4</td>\n",
       "      <td>1.7</td>\n",
       "      <td>2.9</td>\n",
       "      <td>rain</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1428</th>\n",
       "      <td>2015-11-29</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.7</td>\n",
       "      <td>-2.1</td>\n",
       "      <td>0.9</td>\n",
       "      <td>fog</td>\n",
       "      <td>2015</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1461 rows × 7 columns</p>\n",
       "</div>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 15
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T06:58:45.589845Z",
     "start_time": "2025-09-28T06:58:45.533567Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "df = pd.read_csv(\"data/employees.csv\")\n",
    "\n",
    "df.head(5)\n",
    "df.info()\n",
    "df.describe()\n",
    "df.shape\n",
    "\n",
    "df[df[\"salary\"] == df[\"salary\"].min()]\n",
    "df.sort_values(\"salary\", ascending=True).head(1)\n",
    "\n",
    "df.nlargest(5, \"salary\")\n",
    "\n",
    "df[\"department_id\"].unique()\n",
    "\n",
    "df.groupby(\"department_id\")[\"employee_id\"].count().rename(\"employee_count\").plot(kind=\"bar\")\n",
    "\n",
    "df[\"salary\"].mean()\n",
    "df[\"salary\"].std()\n",
    "df[\"salary\"].median()\n",
    "\n",
    "df.groupby(\"department_id\")[\"salary\"].mean().nlargest(5)"
   ],
   "id": "7291f366c0567866",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 107 entries, 0 to 106\n",
      "Data columns (total 10 columns):\n",
      " #   Column          Non-Null Count  Dtype  \n",
      "---  ------          --------------  -----  \n",
      " 0   employee_id     107 non-null    int64  \n",
      " 1   first_name      107 non-null    object \n",
      " 2   last_name       107 non-null    object \n",
      " 3   email           107 non-null    object \n",
      " 4   phone_number    107 non-null    object \n",
      " 5   job_id          107 non-null    object \n",
      " 6   salary          107 non-null    float64\n",
      " 7   commission_pct  35 non-null     float64\n",
      " 8   manager_id      106 non-null    float64\n",
      " 9   department_id   106 non-null    float64\n",
      "dtypes: float64(4), int64(1), object(5)\n",
      "memory usage: 8.5+ KB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "department_id\n",
       "90.0     19333.333333\n",
       "110.0    10150.000000\n",
       "70.0     10000.000000\n",
       "20.0      9500.000000\n",
       "80.0      8955.882353\n",
       "Name: salary, dtype: float64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHKCAYAAACjRinQAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJj9JREFUeJzt3Qm0FcWBBuACWZVNUEEiiFEjGEdUVMA9iDLGMRAwYjTjMiSORnEhxsjM4G4gmQSME9CMR3GJCjqJEscjRknURMF9jyEaURgRNCYsooBKz6mac9/wWBT0vaLve993Tp93b3dzb72i3+3/VldVNymKoggAAJk0zfVGAACR8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWTULJbNq1aowf/780LZt29CkSZNNXRwAYAPEacOWLl0aunbtGpo2bVpd4SMGj27dum3qYgAAn8K8efPCdtttV13hI7Z4VArfrl27TV0cAGADLFmyJDUeVM7jVRU+KpdaYvAQPgCgumxIlwkdTgGArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyKpZ3rcDPkmP8++ut9d+bdyR9fbaABtKywcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAFRP+Bg3blxo0qRJOPvss2vWLV++PJx++umhU6dOoU2bNmHYsGFh4cKFdVFWAKAxh4/HH388/OxnPwu77757rfXnnHNOuOuuu8Ltt98eHnzwwTB//vwwdOjQuigrANBYw8e7774bjj/++HDNNdeELbfcsmb94sWLw7XXXhvGjx8fBgwYEPr06RMmT54cHnnkkTBr1qy6LDcA0JjCR7yscuSRR4aBAwfWWv/kk0+GDz74oNb6nj17hu7du4eZM2eu87VWrFgRlixZUmsBABquZhv7D6ZMmRKeeuqpdNllTQsWLAgtWrQIHTp0qLW+c+fOadu6jB07Nlx88cUbWwwAoDG0fMybNy+cddZZ4eabbw6tWrWqkwKMHj06Xa6pLPE9AICGa6PCR7ys8tZbb4W99torNGvWLC2xU+mVV16ZHscWjpUrV4ZFixbV+ndxtEuXLl3W+ZotW7YM7dq1q7UAAA3XRl12OfTQQ8Pzzz9fa93JJ5+c+nV873vfC926dQvNmzcPM2bMSENso9mzZ4e5c+eG/v37123JAYCGHz7atm0bdtttt1rrtthiizSnR2X9iBEjwqhRo0LHjh1TK8bIkSNT8OjXr1/dlhwAaBwdTj/JhAkTQtOmTVPLRxzJMmjQoDBp0qS6fhsAoEo1KYqiCCUSh9q2b98+dT7V/4PGqMf5d9fba7827sh6e22gcVuyEedv93YBALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyKpZ3rcD4NPqcf7d9fbar407st5eG9ak5QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AADKGz6uuuqqsPvuu4d27dqlpX///uGee+6p2b58+fJw+umnh06dOoU2bdqEYcOGhYULF9ZHuQGAxhA+tttuuzBu3Ljw5JNPhieeeCIMGDAgDB48OLz44otp+znnnBPuuuuucPvtt4cHH3wwzJ8/PwwdOrS+yg4AVKFmG7PzUUcdVev55ZdfnlpDZs2alYLJtddeG2655ZYUSqLJkyeHXr16pe39+vWr25IDAI2rz8dHH30UpkyZEpYtW5Yuv8TWkA8++CAMHDiwZp+ePXuG7t27h5kzZ673dVasWBGWLFlSawEAGq6NDh/PP/986s/RsmXLcOqpp4Y77rgj7LrrrmHBggWhRYsWoUOHDrX279y5c9q2PmPHjg3t27evWbp16/bpfhMAoGGGj1122SU888wz4dFHHw2nnXZaOPHEE8Mf/vCHT12A0aNHh8WLF9cs8+bN+9SvBQA0sD4fUWzd2GmnndLjPn36hMcffzz85Cc/CcOHDw8rV64MixYtqtX6EUe7dOnSZb2vF1tQ4gIANA6feZ6PVatWpX4bMYg0b948zJgxo2bb7Nmzw9y5c1OfEACAjW75iJdIjjjiiNSJdOnSpWlkywMPPBDuvffe1F9jxIgRYdSoUaFjx45pHpCRI0em4GGkCwDwqcLHW2+9FU444YTw5ptvprARJxyLweOwww5L2ydMmBCaNm2aJheLrSGDBg0KkyZN2pi3AAAauI0KH3Eej4/TqlWrMHHixLQAAKyLe7sAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAJQ3fIwdOzbss88+oW3btmGbbbYJQ4YMCbNnz661z/Lly8Ppp58eOnXqFNq0aROGDRsWFi5cWNflBgAaQ/h48MEHU7CYNWtWuO+++8IHH3wQDj/88LBs2bKafc4555xw1113hdtvvz3tP3/+/DB06ND6KDsAUIWabczO06dPr/X8+uuvTy0gTz75ZDjooIPC4sWLw7XXXhtuueWWMGDAgLTP5MmTQ69evVJg6devX92WHgBoXH0+YtiIOnbsmH7GEBJbQwYOHFizT8+ePUP37t3DzJkz1/kaK1asCEuWLKm1AAAN16cOH6tWrQpnn3122H///cNuu+2W1i1YsCC0aNEidOjQoda+nTt3TtvW14+kffv2NUu3bt0+bZEAgIYcPmLfjxdeeCFMmTLlMxVg9OjRqQWlssybN+8zvR4A0ID6fFScccYZ4b//+7/DQw89FLbbbrua9V26dAkrV64MixYtqtX6EUe7xG3r0rJly7QAAI3DRrV8FEWRgscdd9wRfvOb34Qddtih1vY+ffqE5s2bhxkzZtSsi0Nx586dG/r37193pQYAGkfLR7zUEkeyTJs2Lc31UenHEftqtG7dOv0cMWJEGDVqVOqE2q5duzBy5MgUPIx0AQA2OnxcddVV6echhxxSa30cTnvSSSelxxMmTAhNmzZNk4vFkSyDBg0KkyZNUtsAwMaHj3jZ5ZO0atUqTJw4MS0AAGtybxcAICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AADKHT4eeuihcNRRR4WuXbuGJk2ahDvvvLPW9qIowgUXXBC23Xbb0Lp16zBw4MDw8ssv12WZAYDGFD6WLVsWevfuHSZOnLjO7T/84Q/DlVdeGa6++urw6KOPhi222CIMGjQoLF++vC7KCwBUuWYb+w+OOOKItKxLbPW44oorwr/927+FwYMHp3U33nhj6Ny5c2ohOfbYYz97iQGAqlanfT7mzJkTFixYkC61VLRv3z707ds3zJw5c53/ZsWKFWHJkiW1FgCg4arT8BGDRxRbOlYXn1e2rWns2LEpoFSWbt261WWRAICS2eSjXUaPHh0WL15cs8ybN29TFwkAqJbw0aVLl/Rz4cKFtdbH55Vta2rZsmVo165drQUAaLjqNHzssMMOKWTMmDGjZl3swxFHvfTv378u3woAaCyjXd59993wyiuv1Opk+swzz4SOHTuG7t27h7PPPjtcdtllYeedd05hZMyYMWlOkCFDhtR12QGAxhA+nnjiifClL32p5vmoUaPSzxNPPDFcf/314bzzzktzgZxyyilh0aJF4YADDgjTp08PrVq1qtuSAwCNI3wccsghaT6P9Ymznl5yySVpAQAo3WgXAKBxET4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhK+AAAshI+AICshA8AICvhAwDISvgAALISPgCArIQPACAr4QMAyKpZ3rejmvU4/+56ed3Xxh1ZL68LUKbPusjn3f/R8gEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBW5vkAPjPzIgAbQ8sHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAVsIHAJCV8AEAZNUs79sB0Jj0OP/uenvt18YdWW+vTf3S8gEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWQkfAEBW5vloYGPfjXsHaJx6VNF5RcsHAJCV8AEAZCV8AABZCR8AQFbCBwCQlfABAGQlfAAAWTWIeT6qaWwzeTk2yH1sRI4P+HhaPgCArIQPACAr4QMAaBjhY+LEiaFHjx6hVatWoW/fvuGxxx6rr7cCABp7+Jg6dWoYNWpUuPDCC8NTTz0VevfuHQYNGhTeeuut+ng7AKCxh4/x48eHb33rW+Hkk08Ou+66a7j66qvD5ptvHq677rr6eDsAoDEPtV25cmV48sknw+jRo2vWNW3aNAwcODDMnDlzrf1XrFiRlorFixenn0uWLNng91y14r1QHzamDBtLmf+fMucpc32WW5lrU+b/p8zV/9mxZAPLXNmvKIpP3rmoY2+88UZ81+KRRx6ptf673/1use+++661/4UXXpj2t1gsFovFEqp+mTdv3idmhU0+yVhsIYn9QypWrVoV/vrXv4ZOnTqFJk2a1Ol7xVTWrVu3MG/evNCuXbtQDZQ5D2XOQ5nzqcZyK3N1lzm2eCxdujR07dr1E/et8/Cx1VZbhc022ywsXLiw1vr4vEuXLmvt37Jly7SsrkOHDqE+xcquloOkQpnzUOY8lDmfaiy3Mldvmdu3b79pOpy2aNEi9OnTJ8yYMaNWa0Z83r9//7p+OwCgytTLZZd4GeXEE08Me++9d9h3333DFVdcEZYtW5ZGvwAAjVu9hI/hw4eHt99+O1xwwQVhwYIFYY899gjTp08PnTt3DptSvLwT5x5Z8zJPmSlzHsqchzLnU43lVubGU+YmsdfpJnt3AKDRcW8XACAr4QMAyEr4AACyEj4AgKyEDwAgK+EDAMhqk9/bhbXvCnznnXemOwDHOVKiOC39fvvtFwYPHpxmkOWzU895/OUvfwnXXXfdOuv5pJNOCltvvfWmLmKDUW11XW3lpW416Hk+qu3gfuWVV8KgQYPC/PnzQ9++fWsmZYv3xXn00UfDdtttF+65556w0047hTKpthO5es7j8ccfT/W8+eabh4EDB9aq53i7hffeey/ce++9aSbkslHX9avayrumxx57bK1jI94+JM7oXUYrS3g8N9jwUY0H92GHHRa22GKLcOONN651s594F8ITTjghvP/++6ncZVGNJ3L1nEe/fv1C7969w9VXX73WHarjx86pp54annvuufSBWCbquv5VW3kr3nrrrTBs2LDw8MMPh+7du9c6NubOnRv233//8Itf/CJss802oSxeKevxXDRQffv2LU455ZRi1apVa22L6+K2fv36FWXSunXr4vnnn1/v9ueeey7tUyYDBw4sBg8eXCxevHitbXFd3Hb44YcXZaKe82jVqlXx0ksvrXd73Bb3KRt1Xf+qrbwVw4YNK/r371/88Y9/XGtbXLfffvsVRx99dFEmA0t6PDfY8FGNB/e2225b3HXXXevd/qtf/SrtUybVeCJXz3n06NGjuOGGG9a7PW7bfvvti7JR1/Wv2spb0aZNm+Kpp55a7/Ynnngi7VMmrUt6PDfYDqfxela8LtezZ891bo/bNvWN7tb0zW9+MzX5jxkzJhx66KFrXSq67LLLwsiRI0OZdOjQIbz22mtht912W+f2uC3uUybqOY9zzz03nHLKKeHJJ59cZz1fc8014Uc/+lEoG3Vd/6qtvBXxRmzx0uz6LF26tHQ3mOtQ1uO5aKB++tOfFi1btizOPPPMYtq0acWsWbPSEh/HdTHpTZw4sSibcePGpW/dTZo0KZo2bZqW+Diu+8EPflCUzZgxY4ott9yyGD9+fPHss88WCxYsSEt8HNd17NixuPDCC4uyUc95TJkyJV0CbdasWarfuMTHcd3UqVOLMlLXeVRbeaNvf/vbqUXml7/8Za3LGPFxXBdbdM4444yiTMaU9HhusOGjWg/uildffbV45JFH0hIfl1m1nchXp57zWLlyZTF//vy0xMdlp67zqabyLl++vDj11FOLFi1apGMiXrqPS3wc15122mlpn7IZV8LjucGOdlndBx98kIbdRltttVVo3rz5pi5SgzRnzpxaw7h22GGHTV2kBkk956OuWZd46SVeMlr92OjTp89ao+fKZk6JjudGET4aimnTpoXFixen/grUH/Wcx6RJk9KXggsuuGBTF6XBq7a6rrbysvEabfioxoM7dp59+eWXw0cffRSqRTWeyNVzHrGjYfwm9uqrr4Zqoq7rX7WVt+KJJ55Ic0gddNBBoVpM20THc6MNH9V6cFebajyRVyP1nI+6Zn169eoV/vSnP1XVsdFzEx3PjTZ8AEBdirOIxj6G22+//aYuSukJHyVUbfcNqFbquXHeU6Khqra6rrbyUrcadPiotoO7Gu8bUI0ncvXcyO8psYHUdf2ptvKuKR4TsZyrHxvx94g/y+qxsh3Pm2SAbwYvv/xy8fnPfz6NwT744IOLY445Ji3xcVy30047pX3KpBrvG7Bw4cLigAMOSGPG4+Q7++67b1ri47gubov7lIl6btz3lPgk6rr+VVt5K959993i+OOPLzbbbLM0Z9Q222yTlvg4rvvGN75RLFu2rCiThSU9nhts+KjGg7sa7xtQjSdy9dy47ynxSdR1/au28laMGDGi2HnnnYvp06cXH374Yc36+Pjee+8tvvCFLxTf/OY3izIZVtLjucGGj2o8uDt16lQ88MAD693+29/+Nu1TJtV4IlfPeVTjDfwidV3/qq28FR06dCgefvjh9W7//e9/n/YpkzYlPZ6bhgaqcjOd9SnjzaGGDx8eTjzxxHDHHXfUunlRfBzXnXzyyeHrX/96KJNqvNGSes57A78JEyaE5557Ll3Pj0t8HNeddNJJ6eZiZaOu61+1lbdi1apVH9tXMG6L+5RJy7Iez0UDVdab6TS0+wZU442W1lfP8fqnem7495T4JOo6j2orb3TccccVe+655zpbEuK6Pn36pD4hZfLtkh7PDXq0yw9+8IPwk5/8JPXubdKkSVoXf93Yy/fss88O5513XiijarpvwIoVK1JdXnfddeHDDz+s+VYQRxo1a9YsjBgxIn2TKds3xUo9xxkJ4zeuKPa433vvvdVzA7+nxCdR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SF/E4zQC65s47Ve/+lW65UROwgcAbCSTV342DbbDKQDUlxg2Yl+VuFSCR7yk+E//9E+hmszbRGXW8gEAdSDenmGvvfYqfef1MpS5wXY4BYC6FPtGfJw4HLtsflXSMmv5AIANEOcy+qRpGuL2MrV8NC1pmfX5AIAGOnnltiUts/ABABsxeeX6lHHyyj4lLbM+HwDQQCev/G5Jy6zPBwCQlcsuAEBWwgcAkJXwAQBkJXwAAFkJH1DlDjnkkHQ3TT6766+/PnTo0OFj97nooovCHnvska1M0BAJH0CdeO2119KcAc8880woix49eoQrrrhig/cfPnx4+NOf/lSvZQLM8wHUgZUrV4aGoHXr1mkB6peWD6gicbKgE044IbRp0yZNm/zjH/+41vYVK1aEc889N3zuc58LW2yxRejbt2944IEH1rqscOedd4add945tGrVKgwaNCjdVrviz3/+cxg8eHDo3Llzep999tkn3H///Wu1KFx66aWpLO3atQunnHJKzW3F99xzz9QCEi8HRSeddFIYMmRI+P73v59eM77/JZdcEj788MM0AVLHjh3DdtttFyZPnlzrPWKZjjnmmLR/3CeWKbauVFRe90c/+lGqi06dOoXTTz89fPDBB2l7fP/XX389nHPOOak8cfk0l13GjRuXyt22bdswYsSIsHz58g36vwLWT/iAKhJP1g8++GCYNm1a+PWvf52Cxer3ZjjjjDPCzJkzw5QpU8Jzzz0Xvva1r4W///u/Dy+//HLNPu+99164/PLLw4033hgefvjhsGjRonDsscfWbH/33XfDl7/85TBjxozw9NNPp39/1FFHhblz59YqSzzp9+7dO+0zZsyY8Nhjj6X1Mai8+eab6X4SFb/5zW/C/Pnzw0MPPRTGjx8fLrzwwvAP//APYcsttwyPPvpoOPXUU8M///M/h//5n/9J+8cAEUNRPOH/7ne/S+WMQSiWZfVWljgzYwxL8ecNN9yQwkNcovj+MdTEoBPLE5eNddttt6U+HjE4PfHEEynkTJo0aaNfB1hDnOEUKL+lS5cWLVq0KG677baade+8807RunXr4qyzzipef/31YrPNNiveeOONWv/u0EMPLUaPHp0eT548Oc5oXMyaNatm+0svvZTWPfroo+t97y9+8YvFf/zHf9Q833777YshQ4bU2mfOnDnpdZ5++ula60888cS0/0cffVSzbpdddikOPPDAmucffvhhscUWWxS33npren7TTTelfVatWlWzz4oVK9Lveu+999Z63fhvK772ta8Vw4cPr1XOCRMmFBsq1k/79u1rnvfv37/49re/XWufvn37Fr17997g1wTWpuUDqkT8hh+/9cdLKRXxcsQuu+ySHj///PPptthf+MIXUitBZYktJfHfVjRr1ixdSqno2bNnutTw0ksv1bR8xEs3vXr1Suvja8Rta7Z87L333htc9i9+8Yvp1t4V8TLG3/3d39U832yzzdJlk7feeis9f/bZZ8Mrr7ySWj4qv0f8XeMlj9V/l/i68d9WxJaJymvUhfh7r17fUf/+/evs9aGx0uEUGogYGuKJON7BcvUTchRP3hsqBo/77rsvXVaJN52KHTCPPvrotTqVxj4lG6p58+a1nsf+F+taF2/xXfld4t04b7755rVea+utt/7Y1628BlBewgdUiR133DGdbGMfie7du6d1f/vb39LQ0IMPPjh19IwtH/Gb/4EHHrje14kdPWP/hX333Tc9nz17dur3EVs6oti/Inbm/OpXv1oTBFbv6Lk+LVq0SD9jGT6rvfbaK0ydOjVss802qUPrpxXL9FnKE+sk1nfsWFsxa9asT/16wP9x2QWqRGy9iKMtYqfT2IHzhRdeSCGhcjkjXm45/vjj04kydracM2dO6gQ6duzYcPfdd9e8TgwwI0eOTCfV2EoSX6Nfv341YSSOgon/Ps7XES9/HHfccRvUmhCDQmwlmT59eli4cGFYvHjxp/5d4++x1VZbpREuscNp/F1i59ozzzyzplPqhoijcmIn1zfeeCP85S9/2ehynHXWWeG6665LI3FiyIsdZV988cWNfh2gNuEDqsi///u/p1aNOPpk4MCB4YADDkiXJyriSTKGj+985zupL0gcivr444/XtJREm2++efje976XQsX++++fQk1sZaiIo1HiKJT99tsvvU8cdRJbIj5J7Ety5ZVXhp/97Geha9euKTh8WrGMMTTEcg8dOjS1QFSGuW5MS0gc6RJbbWKr0eqXazZm0rE4kue8885L9RyH7p522mkb/TpAbU1ir9M11gENVByGGqdij5dZADYVLR8AQFbCB9BoHHHEEbWGIa++xInEgDxcdgEajdjx9P3331/ntjiPSFyA+id8AABZuewCAGQlfAAAWQkfAEBWwgcAkJXwAQBkJXwAAFkJHwBAyOl/Af0IHd1awBNeAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 33
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:12:13.417929Z",
     "start_time": "2025-09-28T07:12:13.405268Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = pd.DataFrame(data={\"a\": [1, 2], \"b\": [4, 5]}, index=[1, 2])\n",
    "df2 = pd.DataFrame(data={\"a\": [7, 8], \"b\": [10, 11]}, index=[1, 2])\n",
    "\n",
    "pd.concat([df1, df2], ignore_index = True)  # 按行连接\n",
    "# \ta\tb\n",
    "# 0\t1\t4\n",
    "# 1\t2\t5\n",
    "# 2\t7\t10\n",
    "# 3\t8\t11\n",
    "\n",
    "pd.concat([df1, df2], axis=1)  # 按列连接\n",
    "\n",
    "df1 = pd.DataFrame(data={\"a\": [1, 2], \"b\": [4, 5]}, index=[1, 2])\n",
    "df2 = pd.DataFrame(data={\"b\": [7, 8], \"c\": [10, 11]}, index=[2, 3])\n",
    "\n",
    "pd.concat([df1, df2])\n",
    "#      a  b     c\n",
    "# 1  1.0  4   NaN\n",
    "# 2  2.0  5   NaN\n",
    "# 2  NaN  7  10.0\n",
    "# 3  NaN  8  11.0\n",
    "\n",
    "pd.concat([df1, df2], join=\"inner\")\n",
    "#    b\n",
    "# 1  4\n",
    "# 2  5\n",
    "# 2  7\n",
    "# 3  8\n"
   ],
   "id": "ba45771fcc7269e7",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   b\n",
       "1  4\n",
       "2  5\n",
       "2  7\n",
       "3  8"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>b</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 37
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:22:56.712249Z",
     "start_time": "2025-09-28T07:22:56.696803Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = pd.DataFrame(\n",
    "    {\"employee\": [\"Bob\", \"Jake\", \"Lisa\", \"Sue\"], \"group\": [\"Accounting\", \"Engineering\", \"Engineering\", \"HR\"]}\n",
    ")\n",
    "df2 = pd.DataFrame({\"employee\": [\"Lisa\", \"Bob\", \"Jake\", \"Sue\"], \"hire_date\": [2004, 2008, 2012, 2014]})\n",
    "print(df1)\n",
    "#   employee        group\n",
    "# 0      Bob   Accounting\n",
    "# 1     Jake  Engineering\n",
    "# 2     Lisa  Engineering\n",
    "# 3      Sue           HR\n",
    "print(df2)\n",
    "#   employee  hire_date\n",
    "# 0     Lisa       2004\n",
    "# 1      Bob       2008\n",
    "# 2     Jake       2012\n",
    "# 3      Sue       2014\n",
    "# 通过相同的字段名employee进行关联的\n",
    "df3 = pd.merge(df1, df2)\n",
    "print(df3)\n",
    "#   employee        group  hire_date\n",
    "# 0      Bob   Accounting       2008\n",
    "# 1     Jake  Engineering       2012\n",
    "# 2     Lisa  Engineering       2004\n",
    "# 3      Sue           HR       2014\n"
   ],
   "id": "7359da15a0f3e532",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group\n",
      "0      Bob   Accounting\n",
      "1     Jake  Engineering\n",
      "2     Lisa  Engineering\n",
      "3      Sue           HR\n",
      "  employee  hire_date\n",
      "0     Lisa       2004\n",
      "1      Bob       2008\n",
      "2     Jake       2012\n",
      "3      Sue       2014\n",
      "  employee        group  hire_date\n",
      "0      Bob   Accounting       2008\n",
      "1     Jake  Engineering       2012\n",
      "2     Lisa  Engineering       2004\n",
      "3      Sue           HR       2014\n"
     ]
    }
   ],
   "execution_count": 40
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:23:35.840060Z",
     "start_time": "2025-09-28T07:23:35.834641Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = pd.DataFrame(\n",
    "    {\"employee\": [\"Bob\", \"Jake\", \"Lisa\", \"Sue\"], \"group\": [\"Accounting\", \"Engineering\", \"Engineering\", \"HR\"]}\n",
    ")\n",
    "df2 = pd.DataFrame({\"employee\": [\"Lisa\", \"Bob\", \"Jake\", \"Sue\"], \"hire_date\": [2004, 2008, 2012, 2014]})\n",
    "print(df1)\n",
    "#   employee        group\n",
    "# 0      Bob   Accounting\n",
    "# 1     Jake  Engineering\n",
    "# 2     Lisa  Engineering\n",
    "# 3      Sue           HR\n",
    "print(df2)\n",
    "#   employee  hire_date\n",
    "# 0     Lisa       2004\n",
    "# 1      Bob       2008\n",
    "# 2     Jake       2012\n",
    "# 3      Sue       2014\n",
    "df3 = pd.merge(df1, df2, on=\"employee\")\n",
    "print(df3)\n",
    "#   employee        group  hire_date\n",
    "# 0      Bob   Accounting       2008\n",
    "# 1     Jake  Engineering       2012\n",
    "# 2     Lisa  Engineering       2004\n",
    "# 3      Sue           HR       2014\n",
    "\n"
   ],
   "id": "6aafb43726d0484f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group\n",
      "0      Bob   Accounting\n",
      "1     Jake  Engineering\n",
      "2     Lisa  Engineering\n",
      "3      Sue           HR\n",
      "  employee  hire_date\n",
      "0     Lisa       2004\n",
      "1      Bob       2008\n",
      "2     Jake       2012\n",
      "3      Sue       2014\n",
      "  employee        group  hire_date\n",
      "0      Bob   Accounting       2008\n",
      "1     Jake  Engineering       2012\n",
      "2     Lisa  Engineering       2004\n",
      "3      Sue           HR       2014\n"
     ]
    }
   ],
   "execution_count": 42
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:24:45.034270Z",
     "start_time": "2025-09-28T07:24:45.028885Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = pd.DataFrame(\n",
    "    {\"employee\": [\"Bob\", \"Jake\", \"Lisa\", \"Sue\"], \"group\": [\"Accounting\", \"Engineering\", \"Engineering\", \"HR\"]}\n",
    ")\n",
    "df2 = pd.DataFrame({\"name\": [\"Bob\", \"Jake\", \"Lisa\", \"Sue\"], \"salary\": [70000, 80000, 120000, 90000]})\n",
    "print(df1)\n",
    "#   employee        group\n",
    "# 0      Bob   Accounting\n",
    "# 1     Jake  Engineering\n",
    "# 2     Lisa  Engineering\n",
    "# 3      Sue           HR\n",
    "print(df2)\n",
    "#    name  salary\n",
    "# 0   Bob   70000\n",
    "# 1  Jake   80000\n",
    "# 2  Lisa  120000\n",
    "# 3   Sue   90000\n",
    "df3 = pd.merge(df1, df2, left_on=\"employee\", right_on=\"name\")\n",
    "print(df3)\n",
    "#   employee        group  name  salary\n",
    "# 0      Bob   Accounting   Bob   70000\n",
    "# 1     Jake  Engineering  Jake   80000\n",
    "# 2     Lisa  Engineering  Lisa  120000\n",
    "# 3      Sue           HR   Sue   90000\n"
   ],
   "id": "d5414f3c5ae089fc",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  employee        group\n",
      "0      Bob   Accounting\n",
      "1     Jake  Engineering\n",
      "2     Lisa  Engineering\n",
      "3      Sue           HR\n",
      "   name  salary\n",
      "0   Bob   70000\n",
      "1  Jake   80000\n",
      "2  Lisa  120000\n",
      "3   Sue   90000\n",
      "  employee        group  name  salary\n",
      "0      Bob   Accounting   Bob   70000\n",
      "1     Jake  Engineering  Jake   80000\n",
      "2     Lisa  Engineering  Lisa  120000\n",
      "3      Sue           HR   Sue   90000\n"
     ]
    }
   ],
   "execution_count": 44
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:26:40.519027Z",
     "start_time": "2025-09-28T07:26:40.509138Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df1 = pd.DataFrame(\n",
    "    {\"employee\": [\"Bob\", \"Jake\", \"Lisa\", \"Sue\"], \"group\": [\"Accounting\", \"Engineering\", \"Engineering\", \"HR\"]}\n",
    ")\n",
    "df2 = pd.DataFrame({\"employee\": [\"Lisa\", \"Bob\", \"Jake\", \"Sue\"], \"hire_date\": [2004, 2008, 2012, 2014]})\n",
    "df1.set_index(\"employee\", inplace=True)\n",
    "df2.set_index(\"employee\", inplace=True)\n",
    "print(df1)\n",
    "#                 group\n",
    "# employee\n",
    "# Bob        Accounting\n",
    "# Jake      Engineering\n",
    "# Lisa      Engineering\n",
    "# Sue                HR\n",
    "print(df2)\n",
    "#           hire_date\n",
    "# employee\n",
    "# Lisa           2004\n",
    "# Bob            2008\n",
    "# Jake           2012\n",
    "# Sue            2014\n",
    "# 设置索引后，如果不指定关联列会报错，建议通过以下方式指定，on=\"employee\"也可#以实现，但是不同的解释器可能效果不一样，因为设置索引后，employee就不算是列了\n",
    "df3 = pd.merge(df1, df2, left_index=True, right_index=True)\n",
    "#                 group  hire_date\n",
    "# employee\n",
    "# Bob        Accounting       2008\n",
    "# Jake      Engineering       2012\n",
    "# Lisa      Engineering       2004\n",
    "# Sue                HR       2014\n"
   ],
   "id": "e1f00190f4990195",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                group\n",
      "employee             \n",
      "Bob        Accounting\n",
      "Jake      Engineering\n",
      "Lisa      Engineering\n",
      "Sue                HR\n",
      "          hire_date\n",
      "employee           \n",
      "Lisa           2004\n",
      "Bob            2008\n",
      "Jake           2012\n",
      "Sue            2014\n"
     ]
    }
   ],
   "execution_count": 46
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:29:42.471277Z",
     "start_time": "2025-09-28T07:29:42.422022Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "\n",
    "df1 = pd.DataFrame({\n",
    "    'key': ['A', 'B', 'C'],\n",
    "    'value1': [1, 2, 3]\n",
    "})\n",
    "\n",
    "df2 = pd.DataFrame({\n",
    "    'key': ['B', 'C', 'D'],\n",
    "    'value2': [4, 5, 6]\n",
    "})\n",
    "\n",
    "# 合并两个 DataFrame，并处理列名冲突\n",
    "df1.join(df2,lsuffix='_left',rsuffix='_right')\n"
   ],
   "id": "c598d3e31c3467dc",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "  key_left  value1 key_right  value2\n",
       "0        A       1         B       4\n",
       "1        B       2         C       5\n",
       "2        C       3         D       6"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key_left</th>\n",
       "      <th>value1</th>\n",
       "      <th>key_right</th>\n",
       "      <th>value2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>1</td>\n",
       "      <td>B</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>2</td>\n",
       "      <td>C</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>3</td>\n",
       "      <td>D</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 48
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:32:36.081584Z",
     "start_time": "2025-09-28T07:32:36.074978Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "s = pd.Series([np.nan, None, pd.NA])\n",
    "print(s)\n",
    "# 0     NaN\n",
    "# 1    None\n",
    "# 2    <NA>\n",
    "# dtype: object\n",
    "print(s.isnull())\n",
    "# 0    True\n",
    "# 1    True\n",
    "# 2    True\n",
    "# dtype: bool\n"
   ],
   "id": "93f5ccafdfeec96c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0     NaN\n",
      "1    None\n",
      "2    <NA>\n",
      "dtype: object\n",
      "0    True\n",
      "1    True\n",
      "2    True\n",
      "dtype: bool\n"
     ]
    }
   ],
   "execution_count": 51
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:34:25.391504Z",
     "start_time": "2025-09-28T07:34:25.376137Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/weather_withna.csv\")\n",
    "df.tail()\n",
    "df.isnull().sum()"
   ],
   "id": "78fa498c571dbade",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "date               0\n",
       "precipitation    303\n",
       "temp_max         303\n",
       "temp_min         303\n",
       "wind             303\n",
       "weather          303\n",
       "dtype: int64"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 56
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:37:08.331608Z",
     "start_time": "2025-09-28T07:37:08.198491Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import missingno as msno\n",
    "import pandas as pd\n",
    "\n",
    "df = pd.read_csv(\"data/weather_withna.csv\")\n",
    "msno.bar(df)\n",
    "msno.heatmap(df)"
   ],
   "id": "4b14bc22d69f70f5",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 2500x1000 with 3 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAACBQAAAPRCAYAAABHh2nSAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAqZhJREFUeJzs3Qm41mP+P/BPWiwtREO2lLKNaCRkGSJrY/2F3xRDY98m2bM0Rkh2hTB2gyk70djKoLGG7Ixd/LLEtMhI6H/d9/U/56ruSueozonX67qe6/s9z3c53+ehz/c81/1+PnedadOmTQsAAAAAAAAAgOksMv0PAAAAAAAAAACJQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAA+MWZNm1aflSsA/wSqYUAaiFAohYCqIUwJwIFAMAvTp06dWLSpEl5/YcffphhCfBLoRYCqIUAiVoIoBbCnNSb41bgZyml69LNEeCX6I477ojhw4fHsGHDYo011oiOHTvGEUccEc2aNVMfgV8MtRBALQRI1EIAtRB+TJ1p+nbAL8Jpp50Wbdq0ib322iv/7CYI/BKdcsop0b9//xnSxfXq1YuDDz44zjvvvFh00UVr9PoAFgS1EEAtBEjUQgC1EOaGKQ/gF3JDTIGCnj17xl133ZWfS2ECeSLgl+TEE0+Mfv36xaabbhr3339/vPzyy3HuuefGCiuskNPH48ePr+lLBJjv1EIAtRAgUQsB1EKYW6Y8gJ+5G264Id8Qk//85z/Ro0ePuO6662LXXXetDBXoVAD83N14441x9tlnx7bbbhvnn39+rL322vn59OHgySefzG3Nxo0bF8stt1zlMeoj8HOjFgKohQCJWgigFkJV6FAAP2MvvPBCXH755Xk9peoOP/zwmDhxYvzxj3/UqQD4RUj17Ztvvol77rkn/3zyySfnDwfp+alTp0bTpk1j4403jhVXXDG+++67ePHFF+O9996LCRMm5Po4faszgIWVWgigFgIkaiGAWgjVUWeakUT4WUo3vjPPPDP69u2b5/pJSbvUoSD9fO2118aSSy6Zl6lTQSJZB/xcjR07NjbYYINYbLHF4q233sq1bsqUKXn+s08//TS23377/MHgd7/7Xdx3332x9NJLR4sWLXJK+de//nX+kLDIIjKYwMJNLQRQCwEStRBALYSq8n87/EzVr18/1lxzzVh33XVjp512iiZNmsQqq6wSf/7zn2O//fbLaTqdCoBfgvTHfapxKUmcWpUl6cNBalmWglfpw8Fqq62W9+vUqVMss8wyMXr06OjcuXOeNy09L3kMLOzUQgC1ECBRCwHUQqgqHQrgZyy143n//fejTZs2Mzz/wQcfxOmnnx7XXHPNLDsVpMf06TrdC4CFVapfqRb26tUrrrjiityubMcdd4x11lknLrroonj44Yfzh4Kbbropll9++dzdJX04OOqoo+KJJ56I9ddfPx588MHc6gxgYaUWAqiFAIlaCKAWQnUIFMDPULoZ1qtXb4bnZm7BM7tQwffffx9169bN+zz77LOx1lprRaNGjRb4awCYlx599NE466yz8h/700sfFEaOHBmNGzeeoU7+85//jL322iuHqUaMGBGrr756DV05wLyjFgKohQCJWgigFkJVzDjiCCy0hg0bltvwnHDCCUWYIJl5Pp80/UGfPn3yegoVpOkPUpiga9eu+bkTTzwxbrvttny+/fffX4cCYKEwZMiQaN++fW5JNr0tttgiVlhhhXj++efjhRdeyHOk3X777TlQlT4cpKRxmiqmQsXx//d//5dbn/mAACxM1EIAtRAgUQsB1EKYF3QogJ+Bfv36xXnnnRfjx4+Pq666Kvbbb7+5PnbmTgXXX399vPnmmzlIkOYMeuWVV6J169bz9foB5oWePXvGJZdcEpdddlkOQlWEq2Y1bcvnn3+ea9v//u//xpVXXln5fEWXltTpJXVoSXUwpY+bNWu2wF8PQHWohQBqIUCiFgKohTCvzPiVZWChc/zxx8cpp5ySb3QPPfRQlcIEFZ0KTjrppDjooINiwoQJsffee+cwwdJLLx3PPfecMAGwUEhzmKUPB//zP/8Tm2+++QydWmbVYeWbb76JxRZbLF577bUcoqpQMeXLOeecE++8806eEy3tB7AwUAsB1EKARC0EUAthXhIogIVY6kaQOhPssssuucNA586dc7Ju5sYjc2pEkratuuqqOZTQoUOH+Oqrr6Jp06bx2GOPxa9//esF8CoAfvqHgwEDBsQee+yRO7akpPCc6l96Lk0Dk1qaPfnkk7mWpiljKlx00UVxwQUXxIorrhh/+ctfolGjRgvstQBUl1oIoBYCJGohgFoI85opD2AhlP7Zpm4Cu+++e7z00ksxbNiwHAaY3sSJE3OibokllsgteNJcPzO38fnhhx/yTTJJN8G+ffvmMMHIkSNnuMEC1FZHH310/oM+1cM0fcsaa6wxQyuymU1fBwcOHBi9evXK623bts0fGFJtffrpp2O55ZaLhx9+ONZee+0F/IoAqk4tBFALARK1EEAthPlBoAAWUq+88kpsuOGGeaqCdHOs8PLLL8cDDzyQn/v2229jySWXjE022SQOP/zwvP+s5gZK3QlSSi+FCR5//HGdCYCFwpFHHhkXX3xxdO3aNSeEV1555cptKVD11ltvxdChQ3N4KgWr9tprr1hmmWXyeoWzzz47zj333Jg0aVJMnTo1z3220UYbxYUXXhht2rSpoVcGMPfUQgC1ECBRCwHUQphfBApgIZVCAzvssEOcddZZccIJJ+TnUiueU089NUaMGJE7D6Qb3SeffJK3pRY8d955Z+W0CBWhgi+++CI222yzGDNmTDzzzDPCBMBC4Yknnshzn6U//lPqOE3/UmHUqFFx3XXXxdVXXx1TpkypfD6lkVMIq3v37jlRXCF1Zfnss8/ivffey+dMHwxSwAqgtlMLAdRCgEQtBFALYX4SKICF1EMPPRTbbbdd7LPPPvlGmNruHHjggXHbbbflkMG2226b2/HceuutOXGX9k/TH6SWPB07dpzhXCmVlwIIrVu3rrHXA1AV6Q/6wYMH53qX2pWledFOPPHE3KXlT3/6Uzz22GM5ObzuuuvmcFUKVL3xxhvRvHnzOOaYY+LQQw/NyeNZtTkDWFiohQBqIUCiFgKohTA/CRTAQmrs2LGxwQYbxNJLL527FaSfO3TokKcu6N27d+V8QGnag5deeinfOIcPH54DCJdffnkstthi+TwprZfCBAALmy+//DJuuumm6Nu3b+68kkJV77zzTg5WnX/++bH//vtHkyZN8r7jx4+PQw45JG655ZZYffXV45577snLWU0DA7AwUQsB1EKARC0EUAthfhEogIXE9AP/6Z9tmu8n3fxS4i6170nhgh49esRTTz0Vbdu2rdw33fjSPD+pi8Fhhx0Wq622Wm79s9RSS9XwKwKYdx8SzjjjjPj888/zc/3794/jjz++cp/Uxiyli9P2NO3LK6+8Ej179oyLLrrIBwTgZ0EtBFALARK1EEAthPnB15KhlnvttdfyMgUEKvI/6Wa2+OKLx3777Zd/vuCCC+K0007L+7Ro0aKyJU/FTa9+/fqx/fbb5zY+H3/8cXz66ac19noA5qXUpSXNcXbKKafkGrfLLrvkdmZJRc1MHw5S15Zf/epXOXiVpKBV4sMB8HOgFgKohQCJWgigFsL8UG++nBWYJ9LUBffdd19uz7PbbrvlG9n06bitt946LrzwwnwzTHP9JKkTweGHHx4NGjTI+6ZHCho0atQoL9u0aRMrr7xyDb8ygKqb3RQtyyyzTHTr1i0aNmyYu6+kENXs/vifOHFiXpoLDVhYqYUAaiFAohYCqIWwoAgUQC115ZVXxjnnnJPX09w+9erVi5122qkyVJCk9dSlILXl6devX37uwQcfjPXXXz822WSTfEzFDfLyyy+PsWPH5mBCxc0ToLZLoan0oeDII4/My9l9SEhp4z333DOHp5Lpw1fpmIoPBGlamPRBYscddyz2A6it1EIAtRAgUQsB1EKoCQIFUAulG9a4cePy+kYbbRRPPPFE7lKQnt95553zzSzd8NKycePGccwxx+QpEPr06RMPPPBAfPvttzk40LVr19ypIIUJ0k12pZVWyvsKFAALg5NOOinPb7b22mvnP/z333//OX5IqPhwkEz/4aBi3zQ9TApdbbvttjl4Nf1+ALWVWgigFgIkaiGAWgg1pc60iq86A7XKv/71r/jtb3+bpzP48MMP4/bbb48NNtggTj755BwqSL777rvchaDCzTffHD179ozx48fnm+IKK6yQ5wH69NNPo2XLlnHvvffGr3/96xp8VQBz58Ybb4x99tknr6dgVJqq5YQTTogDDjggPze7DwmzM2jQoDjttNPyB4LHH388Vltttfl27QDziloIoBYCJGohgFoINUmHAqilmjRpEosttlisssoqsffee8fkyZPj/vvvjzPPPDNvT6GC6cMESffu3WONNdbIYYQhQ4bkYEGaKyjdUNMjnQugths9enT+gz459dRT87Qu008Dk+rZnJLHFb766qv4z3/+E2eddVbcdNNNeb60YcOG+XAALBTUQgC1ECBRCwHUQqhpAgVQS6VOAquuumqewiB1HTj++ONzgCB1GTjjjDNyam6nnXbK2//v//4v/vjHP+bj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8cUXR48ePWKdddaJevXqRZ06deKMM86In+Lhhx+OLl26RLNmzWLxxRePNddcM04++eT46quvftJ5AQAAAAAAAKAmx8cHDRqUj0uPAw444Ef3v/vuu2PnnXeO5s2bR4MGDWLZZZeNTTbZJPr27VvsO3ny5Lj55pvjmGOOiU6dOkWTJk3y72nTpk38FPWqc9Bll10WAwYMiHnpwgsvjKOPPjq/qN/+9rex3HLLxeOPPx79+vWL22+/PUaOHJmDBgAAAAAAAACwoFw2D8bH33333Tj++OPzePi0adPmuO+3334be++9d9x66635i/gbb7xxHj//5JNP4tVXX42BAwfGn//85xmOeeutt2KvvfaKWtGhoG3btnHsscfGTTfdFK+//nr84Q9/+EkX8cILL+SkRN26deO+++6LRx99NG655ZZ45513onPnzjnxccghh/yk3wEAAAAAAAAAC3p8/IcffsjdDVKYYJ999vnR/Q888MAcJth1113jww8/jOHDh+fuAyNGjIixY8fGvffeWxzTuHHj+OMf/5g7KaQv689qnwXWoWDm9guLLFKtXEKls846K6cw0gvcYYcdKp9fYokl4uqrr45VV101dyl444038jQIAAAAAAAAALAgHPATx8dTd4PUnf/SSy+Nzz77bI77pvDADTfckEMM6Uv49evXL353x44di+Nat24d11xzTeXP//znP2Ne+GlJgHkgtWtIXQmS7t27F9tXWWWV2HTTTfP6nXfeucCvDwAAAAAAAACqI3XjP/nkk2OLLbaIQw899Ef3Tx0Gkl69ehVhgppQrQ4F89K///3v+Prrr/N6hw4dZrlPej4lNtLUCAAAAAAAAABQ233//fex77775qkOUmf+tPyx/VOHgmTzzTePTz75JAYPHpxDCYsuumist9560bVr12jUqNEvJ1Dw3nvv5eVSSy2V53WYlZVXXnmGfQEAAAAAAACgNjv33HPj6aefjgsvvDBPSfBj3n333fjqq6/y+lNPPRWHHXZY5c8VjjvuuBwy2GqrrWJBqPEpDyZNmpSXDRs2nO0+FQmLiRMnLrDrAgAAAAAAAIDqeOWVV+LUU0+NTTbZJHr27DlXx3zxxReV6/vvv3+sv/768eyzz+Yx9dGjR0eXLl3i888/j1122SXeeuut+EV0KKB2S6kXqEmDBg2q6UsAAAAAAACAufbdd9/lqQ4WWWSRuOaaa/JybkybNq1yfcUVV4wHHnggT3WQtGvXLu655574zW9+k8MK/fv3z9Mo/Ow7FFRMczB58uTZ7lPRxqFJkyYL7LoAAAAAAAAAoKrOPPPMeP755+O0006LNdZYo8pj50mPHj0qwwQV6tatGwcffHBef/jhh+MX0aGgZcuWeTl+/PjcqmH6N6nCmDFjZtgXAAAAAAAAAGqjO++8My+HDh0aw4YNm2Hb+++/n5f33XdfdOrUKa//85//rBwPr1OnTu5UsOqqq87y3BXPjx07Nn4RgYKUyFhiiSXi66+/jlGjRsWWW25Z7JOeT9q3b18DVwgAAAAAAAAAVTNy5MjZbvvkk0/yY3qNGjXK4+dvvPFGjBs3bpbHVTyf9l0QanzKgwYNGsTvfve7vH7zzTcX2z/44IN44okn8vpuu+22wK8PAAAAAAAAAObW6NGjc5eBWT1OPfXUvM/+++9f+dz09thjjzlOafDQQw/l5YYbbhg/q0DBJZdcEmuuuWbss88+xbbevXvn1g3XXntt3H///ZXPp64F6Y38/vvvo2vXrvl4AAAAAAAAAPg56tmzZzRt2jRPlXDFFVfMsG3w4MFx0003Ve5Xa6c8eP755+Owww6r/Pmdd97Jy/SC7r333hnmhlh++eUrWy+8+eab0bx58+J8aSqD888/P44++ujo0qVLbLHFFrHsssvG448/nud+SG0dLr/88upcKgAAAAAAAABU2/PVGB+vrmbNmsWQIUNi5513jkMOOSQuvvjiWGuttfLvfOGFF/I+ffr0yePqM0sd/9P4ejJx4sS8/Oijj6Jjx46V+xxwwAH5MV8DBemXP/3008Xz6WLSo8KUKVPm+pxHHXVUrLPOOjlY8Mwzz8TkyZOjRYsWceKJJ+ZH48aNq3OpAAAAAAAAAFBtE+fD+PicbLPNNvHiiy9Gv3798tQHd999dzRp0iSHCI488sjYdtttZ3lcChx88MEHMzyXrmn6a99+++2rdC11ps08KQNMZ/qkDdSEQYMG1fQlAAAAAAAAwC/SIjV9AQAAAAAAAABA7SNQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAA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59x3331zsuL000+Pk046KVq1apW7FmywwQZx77335vYLL774Yk5TAAAAAAAAAMDPTeP/PxZfMYXBoosuOsP2unXrxsEHH5zXH3744Rm2HXPMMTFs2LA49NBDc3ggTXuwxBJL5ADCTTfdFNttt1188MEHccopp8zfQEHFnApzSi5UbJub+Rc+/vjjeOihh/J6t27diu3169eP3XfffZZvCgAAAAAAAAD8HLRs2TLq1KmT11ddddVZ7lPxfJoFoML3338ff/vb32Y75p507969WmPuVQ4UrLfeepXzN7z33nuz3GfUqFF52b59+x8934cffli5PruOBksuuWRefvnll1W9XAAAAAAAAACo9Ro1ahRrrLFGXh83btws96l4Pu1b4bPPPospU6bMlzH3KgcKVlpppTwVQXLzzTcX20eOHJk7FKT2C126dPnR86W5Hyo8/fTTs9znqaeeyss0FQIAAAAAAAAA/Bztsccec+wkUNH9f8MNN6x8bplllqmcHmFej7nXi2o46aSTYrfddov+/fvHDjvsUNmJIHUtOOyww/L6EUccUZlySO6888448cQTc4Bg+PDhlc+3aNEiBxSeffbZOPLII/O8DtNPlXDjjTfGkCFDZmjDAAALUsW9DWrKoEGDavoSQC2kxqmF1AZqITVNLaQ2UAupaWohtYFaSE1TC3/eevbsGZdcckkeN7/iiivi4IMPrtw2ePDguOmmmyr3q9CgQYPYeeed49Zbb40+ffrERhttFOuuu27l9jQ+f9FFF1VrzL1agYJdd901X+DAgQOjY8eO0blz52jYsGG+kPHjx8emm24ap59++gzHTJgwId5888345ptvivNdc801seWWW8brr78ea621Vj5ns2bN8s+vvvpq3mfvvfeOvfbaqzqXCwAAAAAAAADV8vzzz88QJnrnnXfyMg3433vvvTN8yX755ZfP62PHjs1f0q/w0Ucf5eU999yTx8OnD4hUfIE/SePk6Qv3KSBwyCGHxMUXX5zH0NPvfOGFF/I+KTQw82wBF154YTz33HPx7rvv5vOl35G+7J9+HjVqVN5nq622imOPPXb+BwqSAQMG5ODApZdeGk888URMnTo1WrduHb17946jjjoqpyDmVtu2beOVV17JL/If//hH7laQ5nho2rRpbLfddrHffvvFnnvuWd1LBQAAAAAAAIBqmThx4iyn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t/HGG8dyyy0Xn3zySbz66qsxcODA+POf/1zdywUAAAAAAACAKnv66adjm222iUmTJsWKK64Y2267bdStWzdGjx6dAwE333xzfuyxxx6Vx6SgwZzCCY888kgOFGyxxRa1euy8WoGCu+66K4cJUojg0Ucfjfbt2+fnx40bl8MFI0eOjD59+sR555031+c88MAD8xuy6667xpVXXhnNmjWr3PbDDz/EM888U51LBQAAAAAAAIBqO+igg3KYIC0vueSSqF+/fuU49qmnnhpnnHFG3rbTTjvlzgXJddddN9vzHXbYYTlQsPXWW8cqq6xSq8fOqzXlQb9+/fKyd+/elWGCJL2QQYMG5fX0Rk6YMGGuzjd8+PCc3Gjbtm3ccsstM7wh+SIXWSQ6duxYnUsFAAAAAAAAgGr54osv4qWXXsrrKThQESaoGMf+y1/+krsIjB8/Pl5//fUfPd8333wTf//73/P6/vvvX+vHzqscKPj444/j2Wefzevdu3cvtm+22Wax8sorx5QpU2LYsGFzdc6LL764chqF6f8DAAAAAAAAAEBNWXTRRed635kH/2fl9ttvz+GDpZdeOncgqO1j51We8uCFF17Iy/QCW7VqNct9OnToEGPGjMn7duvWbY7n+/7773PKItl8883zvA+DBw+ON998M//HWW+99aJr1655egUAAAAAAAAAWFAaNWoUv/3tb+Pxxx+PU045pZjyIHUo+O9//xs77LBD/uL9j7nmmmvycu+99y7CCrVx7LzKgYL33nsvL1u0aDHbfSreqIp95+Tdd9+Nr776Kq8/9dRTeb6Iip8rHHfccfmN2mqrrap6uQAAAAAAAABQbVdeeWV06dIl/vrXv8Z9992Xv2Bft27d/AX71OH/D3/4Qw4a/Jj3338/HnnkkdlOd1Abx86rPOXBpEmT8rJhw4az3aciETFx4sS5mnOiQnrT1l9//TylQvo9o0ePzv9hPv/889hll13irbfequrlAgAAAAAAAEC1rbHGGvHkk0/GtttumwMEd999d9xxxx35C/Zt2rSJTp06RZMmTX70PNdee21MmzYtBxLWXXfdhWLsvMqBgnktvWEVVlxxxXjggQfyG5hCCe3atYt77rkn2rZtm5MX/fv3r9FrBQAAAAAAAOCX5V//+less8468corr8TNN9+cpyL48ssvY+jQoTF16tQ8+D+rjgPTS9MjXHfddXl9v/32W2jGzqscKGjcuHFeTp48ebb7VLRdmJsURsX5kh49ehTzRKRWEQcffHBef/jhh6t6uQAAAAAAAABQLePHj4/ddtstdwZIXQm6desWyy23XDRt2jR23HHHuP/++2OJJZaIa665pnI6g1lJY90ffvhhLL744tG9e/eFZuy8yoGCli1b5uWYMWNmu0/Ftop9f+x8derUyeurrrrqLPepeH7s2LFVvVwAAAAAAAAAqJb77rsvhwnSmPVGG21UbJ/++TkN8qfAQdK1a9dYcsklF5qx8yoHCtZbb73K+RvSnBCzMmrUqLxs3779j54vtWdIc04k48aNm+U+Fc+nfQEAAAAAAABgQfjwww9/tDt/RUAgTYMwK+n5u+66K6/PaWqE2jh2XuVAwUorrRQbbLBBXk/zQ8xs5MiRuUNBar/QpUuXuTrnHnvsMcfExkMPPZSXG264YVUvFwAAAAAAAACqZcUVV8zLN954IyZMmFBsnzp1ajz//PN5vVWrVrM8x0033RRTpkyJ1q1bxxZbbLFQjZ1XOVCQnHTSSXnZv3//yjenomvBYYcdltePOOKIGVo13HnnnbHmmmtG586di/P17NkzzzExbNiwuOKKK2bYNnjw4PwGV+wHAAAAAAAAAAvCDjvsEA0bNoz//ve/ceCBB8ZXX31Vue3bb7+No446KncxqF+/fuy+++5znO5gv/32q5zSYHZq29h5tQIFu+66a77A9GZ17Ngxv4npzWnTpk28/PLLsemmm8bpp58+wzEprfHmm2/GO++8U5yvWbNmMWTIkFhsscXikEMOibZt2+bkRZoyoVu3bjFt2rTo06fPXHc8AAAAAAAAAICf6le/+lVcfvnlUa9evbj11ltj1VVXjd/97nd5zDytX3rppbHIIovEwIED888ze+GFF2L06NFRt27d6NGjx4/+vto2dl6tQEEyYMCA/EI23njjeOKJJ3JCIk2HkLoWjBgxIhZffPEqnW+bbbaJF198Mfbdd98YP3583H333TnJkd6IBx54IPr27VvdSwUAAAAAAACAatl7771j1KhRORDQuHHjGD58ePzjH//IIYO99tornnzyyTz4P6fuBNttt12ssMIKC93Yeb2fcvCee+6ZH3Mjvbk/lrhYffXV47rrrvsplwQAAAAAAAAA81S7du3i2muvrfJxF198cX5UVW0ZO692hwIAAAAAAAAA4OdLoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAwLwNFNx6663RqVOnaNq0aTRs2DDatWsX55xzTkydOjV+qmHDhkWdOnXyY+utt/7J5wMAAAAAAACAqurRo0fl2PXsHt98801x3OTJk+Oss86KDh06RJMmTaJ+/frRvHnz2HHHHeOee+6Z69//4osvRoMGDfLvadOmTSxI9ap7YK9evWLAgAFRr1692GqrraJRo0YxYsSIOOGEE2Lo0KHx4IMPxuKLL16tc//nP/+JAw88ML8h06ZNq+4lAgAAAAAAAMA8semmm852QL9u3boz/PzFF1/E5ptvHq+99loeS99kk01iqaWWirfffjvuu+++/OjZs2cec5+Tb7/9NvbZZ5/47rvvoiZUK1Bw11135ReWXvijjz4a7du3z8+PGzcuhwtGjhwZffr0ifPOO69aF/WnP/0pPv300zjkkEPisssuq9Y5AAAAAAAAAGBeOeCAA3K3grnRt2/fHCZYf/3185fxl1566Rm69e+yyy4xcODA6NatW3Ts2HGO53nppZfiiCOOiEsuuSQWiikP+vXrl5e9e/euDBMkzZo1i0GDBuX19GImTJhQ5XPfeeedcdNNN8XRRx8dG264YXUuDwAAAAAAAABqzIgRI/IydfifPkyQdOnSJbbccsu8/uSTT872HM8++2z0798/9thjj+jatWvUhCoHCj7++ON84Un37t2L7ZtttlmsvPLKMWXKlJysqIrU4SB1JVhjjTVy0gIAAAAAAAAAFjaLLbbYXO2XvrQ/K998803su+++0bRp0xrpTFDtQMELL7yQlylF0apVq1nu06FDhxn2nVuHHnpoDhVcffXVc/0GAwAAAAAAAMD89sgjj8QxxxwTBx10UJx44om5+376ov2s7LDDDnl59tlnx5dffjnDtvTF/HSu5s2bx8477zzL4/v06ROvv/56nhZh2WWXjZpSr6oHvPfee3nZokWL2e6TOhRMv+/cGDx4cNx2221x5JFHxqabblrVywIAAAAAAACA+eaGG24onlt++eXjmmuuie23336G59NUB88880w88MADscoqq+Qx8KWWWirefvvteO655/LP6Yv2Sy65ZHHOJ554Ii644ILYZZddolu3blGTqtyhYNKkSXnZsGHD2e7TqFGjvJw4ceJcnfOTTz6Jww8/PFq3bh39+vWr6iUBAAAAAAAAwHzRrl27GDBgQLzyyit5DPzTTz+NBx98MDbZZJMYO3Zs7jLwz3/+c4Zj0nj60KFD49hjj43JkyfnYMGQIUNymGCZZZaJrbfeOlZcccXid3399dfRo0ePHDS47LLLoqZVOVAwP6SWEP/5z3/iqquuiiWWWKKmLwcAAAAAAAAAsqOOOip69uwZa6+9djRu3DhPQbDNNtvEyJEjcxeBqVOnRq9evWJ6KWiQuhBcfPHFccYZZ8S7774bX331Ve5asP7668dpp50Wm222WeUX+iv07t073nrrrbjoooty94OFLlCQ3qAkpShmJ70RSZMmTX70fNdff31OZhxyyCHRqVOnql4OAAAAAAAAACxwderUycGA5MUXX4wxY8ZUbtt3333j2WefjdNPPz1OOumkaNWqVe5asMEGG8S9994b66yzTj7mvPPOqzwmdTm45JJLokuXLrHPPvtEbVCvqge0bNkyL6d/M2ZWsa1i3zm588478zK9mTMHCtJUCElq+1CxbfDgwdG8efOqXjYAAAAAAAAAzFNrrbVW5fpHH30UK6+8cnz88cfx0EMP5ee6detWHFO/fv3Yfffd4+WXX46HH364MpRw1113xbRp0+LDDz8sxs7Hjx+fl+ncFdtSF4Pf/OY3tStQsN566+XlF198Ee+9915OUsxs1KhRedm+ffu5Pm/FMbOS3pxHH300r3/zzTdVvWQAAAAAAAAAmOe++OKLott/CgRUmF1X/yWXXDIvv/zyy2LbK6+8Mtvfl8bLK8bOK0IGtWrKg5VWWim3YUhuvvnmYnuaJyJ1KFh00UVzK4YfU5GymNXj2muvzft07ty58rm56XoAAAAAAAAAAPPb4MGDK4MDa6yxRl5fccUVK7c//fTTszzuqaeeysvpv8CfOg7Mbuz8kUceyfu0bt268rmZuxjUikBBkuZ4SPr37x/PP//8DOmLww47LK8fccQRlamKiqkN1lxzzRwOAAAAAAAAAIDabvTo0XHPPffEd999N8PzP/zwQ1x99dWVY+c9e/bMUxkkLVq0qPyS/pFHHhnvv//+DMfeeOONMWTIkLzevXv3qM2qPOVBsuuuu+Y3ZODAgdGxY8ccEmjYsGEMHz48t1XYdNNN4/TTT5/hmAkTJsSbb75pygIAAAAAAAAAFgrvv/9+7LbbbtG0adNo3759LLfccnlMPE1LUDG1Qbdu3eLUU0+d4bhrrrkmttxyy3j99ddjrbXWyuPqzZo1yz+/+uqreZ+999479tprr/jZBQqSAQMG5ODApZdeGk888URMnTo1t1fo3bt3HHXUUdGgQYN5e6UAAAAAAAAAsAC1a9cuevXqFaNGjYo33ngj/vWvf+XpBlKwYPfdd48//vGP0aVLl+K4tm3b5tDBhRdeGP/4xz/i2WefjSlTpuRgwnbbbRf77bdf7LnnnlHbVTtQkKQXOLcvskePHvlRFdU5BgAAAAAAAADmhVatWuVQQHWk0EH//v3z46fq1KlTDjIsaIss8N8IAAAAAAAAANR6AgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAAQEGgAAAAAAAAAAAoCBQAAAAAAAAAAAWBAgAAAAAAAACgIFAAAAAAAAAAABQECgAAAAAAAACAgkABAAAAAAAAAFAQKAAAAAAAAAAACgIFAAAAAAAAAEBBoAAAAAAAAAAAKAgUAAAAAAAAAAAFgQIAAAAAAAAAoCBQAAAAAAAAAAAUBAoAAAAAAAAAgIJAAQAAAAAAAABQECgAAAAAAAAAAAoCBQAAAAAAAABAQaAAAAAAAAAAACgIFAAAAAAAAAAABYECAAAAAAAAAKAgUAAAAAAAAAAAFAQKAAAAAAAAAICCQAEAAAAAAAAAUBAoAAAAAAAAAAAKAgUAAAAAAAAA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AgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAANoIFAAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAADg2w0UXHjhhWWRRRYpY401Vhl11FHLLLPMUg499NDyr3/96xu933333VfWWGON0rdv3zLSSCOVKaecsmy99dblzTff/G9+TAAAAAAAAAAow9L5eK8OFGy33XZlzTXXLLfffnuZe+65y9JLL11efPHFsuuuu5bFFlusfPrpp1/r/S666KIy77zz1o+TTz55WWmllcoPf/jDcuyxx5b+/fuXZ5555pv+qAAAAAAAAABQhpXz8V4dKLjsssvKUUcdVUYbbbRy9913l2uuuaZcfPHF5emnny4zzzxzue2228pee+31ld/v1VdfLRtssEH597//XU466aQyaNCgcsEFF5SnnnqqrLvuuuWNN94o66yzTvniiy++yY8LAAAAAAAAAGVYOB/v9YGCgw46qH7cbbfdyuyzz971+LjjjluOP/74+nkqC7z//vtf6f2OPPLI8sknn5QllliibLrppl2P/+hHPyonnHBCGWOMMco999xTrr322m/y4wIAAAAAAABAGRbOx3t1oOCVV16ph/uRqgHdLbjggmXSSSct//znP8uVV175ld7z0ksvHer7JeWx4oor1s8vueSSr/vjAgAAAAAAAMA38sp3cD7eqwMFDzzwQP049thjlymnnHKIr5lzzjkHe+2X+fDDD8szzzwz2Pf9N+8HAAAAAAAAAN+GB77l8/FeHyh47rnn6sfJJptsqK9JAqP1tV/m+eef7/p8aO/5dd4PAAAAAAAAAL4Nz33L5+O9PlCQigIx6qijDvU1aVMQH3zwwVd+vy97z6/zfgAAAAAAAADwbfjwWz4f7zT/09M/AMO2448/vqd/BIAeZywEMBYChLEQwFgIEMZCYHjytSsUjD766PXjxx9/PNTXfPTRR/Vjnz59vvL7fdl7fp33AwAAAAAAAIBvw+jf8vl4rw8UTDHFFPXjSy+9NNTXNM81r/0yk08+edfnL7744n/9fgAAAAAAAADwbZjiWz4f7/WBgtlmm61+fOedd8pzzz03xNfce++99ePss8/+H98vKY2ppppqsO/7b94PAAAAAAAAAL4Ns33L5+O9PlAwySSTlLnmmqt+ft5557U9f9ttt9UExogjjliWXXbZr/Seq6yyylDfL+UhLr/88vr5qquu+nV/XAAAAAAAAAD4Rib5Ds7He3WgIPbYY4/68ZBDDin3339/1+NJZWy55Zb186222qqMMcYYXc9deumlZbrppiuLL7542/ttt912ZZRRRinXX399OeWUU7oe/9///d/6fu+99179H+lnP/vZN/lxAQAAAAAAAKB8X+fjvcUPvvjiiy++yTduu+225eijjy4//vGPa0hg1FFHLTfccEM9/F9ggQXKddddV0YeeeSu159xxhnll7/8ZZl88snL888/3/Z+F154YVl77bVriGCeeeap/SXuueee8uyzz5a+ffvWZEfTGgEAAAAAAAAAvi/bfs3z8TK8BwriT3/6UznuuOPKgw8+WP71r3+Vfv36lXXXXbdsv/32ZYQRRhjstf8pUBD33XdfOeigg8rAgQPL+++/XyaccMKy/PLLl7322quGCgAAAAAAAACgJ/zpa5yP9xb/VaAAAAAAAAAAAOidftjTPwAAAAAAAAAAMOwRKAAAAAAAAAAA2ggUAAAAAADAV/Dmm2/29I8AAPC9EigAAAD4Cr744oue/hEAAOhB2223XVlyySXLo48+2tM/CsAw4d///ndP/wjA90CgAAAA4CtskvzgBz8on376afn44497+scBAOB79sYbb5Tbb7+9PPzww2Xbbbctjz32WE//SAA96n//93/L//zP/5QPP/ywbLTRRuXZZ5/t6R8J+I4IFAAAAPwH2SR5/fXXy2yzzVbuuuuunv5xAAD4nvXt27ecdtppZamllio33nhj2WqrrYQKgOHaj370oxq6X2655coZZ5xRzj77bJX9oJcSKIAv8f/+3/8b6nP+MALDi2a8ax33jIHA8GjAgAHlqaeeqpUKwlgIDE+3z4bEOAgMb2aaaaY6J0zbg5tvvrmGCh555JGe/rEAvvdzk2YeeMIJJ5Qnnnii7LPPPmXHHXfsWi8DvYtAAXxJWdsf/vCH9ePTTz9drr766nLllVeWl156qfzzn/+sfxi/LHAA0Fs2j5uFwCeffFLee++9+rnFATA8GmeccerH++67r6d/FIDvTdbEuX32/vvvl9NPP73sscce5bDDDiv33nuvOSEwXLbA6t+/fznqqKO6QgXbbLNNbYMAMDydm/zrX/+qXz/66KNlggkmKDvvvHMZbbTRhhpEBTrb//T0DwDD6h/FlLVNf9xNN9203HDDDeXNN9+sz00++eRl4YUXLocffngZe+yxa6ggf0ABepuMb9k8btLGl112WXn++efLZJNNVjbZZJOy0EILlQknnLCnf0yA7/VGWuZ9wlXA8NYX96233ipLL710eeCBB7qeyxiYOeI666xTN48Bhoe9wgTtr7jiijJw4MDSp0+f+lzaYW277bblmGOOKTPOOGNP/6gA36nm3GS88cYr8847bxl99NHLRhttVEYeeeSusRLoffyXDUM4QGv+KP70pz+tGyY5NNt+++3Lc889V+68885y1lln1cXC7bff3nVTDaC3acJSu+22Wzn00EPr51kcpGpLbqSttdZaZaeddipTTTVVD/+kAN/+AVoTqGr9eqSRRqpzxYceeqg+nhKPQgVAb9ZUJlhmmWXKgw8+WOd/c889d72Jlj7im2++eQ0bbLnllmWsscbq6R8X4DsNV2WvMOPh3/72tzLGGGPUC0dTTjllefvtt2ulgq233lqoABguvPLKK+Wzzz6rY1+MOOKIdT44wggj9PSPBnxHXKuGIRygff7552WDDTaoYYKUc0yrg1133bWceOKJ5S9/+UsZZZRRyosvvljLPQL0Zn/4wx/KkUceWZZaaqly0003lSeffLIccsghZZJJJimnnHJK7Y+WgAFAb9GEBz744IPa6ioHZU1oYJpppikTTzxxefXVV+vmSfcwgXZYQG/RWqo2VaoyHh5wwAHl/PPPr2H7U089tRx99NG1at9ee+1VjjvuuPKPf/yjR39mgO9K5oZpf7rCCiuU2267rVYjePbZZ8vZZ59dWx2kWssCCyzQFSpI6Aqgt8q6N2vj+++/v6tKVc5K3njjjfq5lgfQOwkUwBDk5m1CBMsvv3z5zW9+U0YdddT6ePoCrbvuunUDeYcddii/+tWvBvu+3FID6GTdJ/333HNPmXrqqWuFgty+SJBgu+22KwcffHCZa665ynnnnVf2228/oQKgV20YJ0TQt2/f2uoqVVjmmWeest5665UBAwbU5zLn++tf/1reeeedwQ7QtMECelOwKu1dsmGcllepPpDKVJFDtdhqq63quJhQwW9/+1uhAqBXavb6MvdLYGDFFVesl49SsSDjYS4drbHGGnXNvOCCC3aFCh555JGe/tEBvhNZ92a+OOuss5ZbbrmlhgoGDRrUNVfMPDKtD4DeRcsDGIK77767hgZyaJbStpGNlBympdXBnnvuWXbZZZfaH+jTTz+tpR/zBzSlwAE6WVPi+6STTirjjjtuueqqq2op25lnnrk+ngVDypelh+6Pf/zjsvfee5dzzz23brLk84QPADpdNkPS8iobI2lvkFtm9913X9fzmfttuummtW9ugqcZI3PYNu2005YxxxyzlgOfYYYZevR3APi6subNBnHmgwkGpL3fRBNNVA/IVl999Tr3y1wwJW2b1yZkn3ng7rvvXkMFTdAgYyFAb9BUpPr73/9eP/785z+ve4W5dJTxMDI+JnCffcRU9Uu71G222Ub7A6DjNXO+oe0fzjbbbGXgwIG1dfSFF15Yx8Nzzjmnhq4SKshHoHfwXzPDvdY/ilkM5I/ea6+9Vr9ublfkj1/+KHYPE0Rem2Ryyj4mpQzQ6TLx32KLLWrJxoyJ6QkZrQuBfFx88cXr5wkSpFJBFhMZI1P2DKCTLbfccvVffPTRR7V/+Icfflj75R5xxBG1tGMO2hIoePzxx2vJ2+bGbiq5tIYPAIZlOfyabrrpaoC0dbM4AdKMZy+//HLdHM5aN+Nc0xc3r23W0htvvHF9LKGCVK5Kj/Hddtut9hcH6HQJTSVU8Pbbb9evM89LqCBr5VZZIy+77LJlwgknrBWtcsCWCldZK2ecBeg0zT5g5oAZ07Iezro4Qan+/fvXQH3MMsss5dZbb63nJxnzQqgAeh//JTNcLgIiNyvydf6gff7553VjpFkMTDHFFPXjJ598Uj/mRkZuqnUPE0Qey3O5uQHQG8w000xl5ZVXLtdff309SLv22mvLWmutVcfL1nG0NVSQzeP0j0zP8TPOOMMGMtDRckiWsS7/UoGq6QuZzeA///nPNUSQ3uHLLLNMvYWWsTK31tL+Je2xxhtvvMHGS4Bh0dVXX13HsszpllhiidriJbI+TvWVlOtOtZb0B8+/jHOpvtJsDHcPFTQfMydMuACgN2jmcwncJ1iasTHr3gRLWy8p5cAtlQuWXHLJOhdMIPWBBx5QzRToSDk7yXwvQdG0dcneYMa8xvTTT18222yzWo3lP4UKmnZaQGfT5JPhbmP4mWeeqX8I80csf9CyATzZZJN19fiJfv361Y+bbLJJ/WOYwEA2RPKa1jBBNl+uvPLKsuqqq3Yl8gA6XVq47LvvvrWtQTY/kkLOWNeMo62aUMFvfvObOg4ussgiwgRAx2jdEGmVjeFmvGs2PpoekJkn5lZGeopHxr455pijrLnmmjVoOvnkk9fXChMAw7rM9TLn+/3vf1/DBE2llYTt83kOy2677bZayjaVWH7xi1/UQ7Tmtlk0oYLYaKON6gZyKvvle5u+4wCdpBm78rF1HEt7v/HHH79cc8015cgjj6yPNWGCjIlN+4OMm6OMMko588wz69iZuSFAJ8nYl3VwLlumBXTGvZx/3HLLLXVsS5urJ554ola6+t3vfle/J/PBJlSQ85PMCVdaaaX6nDAB9A4CBQw3MslP/9uU4k4JskYSxu+++26d+KflQSy11FK1L25uZuQG2oYbblgOPPDAwQ7Jjj322HLIIYfUygS5mdsaNADoVEkNR/qB77XXXnW8zG20LBCyKBjS4Vtzqy0LjG233bY+ZgMZ6ITxLvPDhEtvuOGGMmDAgHLccceVG2+8cYivb8o0JnQVuXU2tPFOSUegU2S+t/XWW5c33nijBgdOPfXU+njWxwkVZJ178803l9lnn72WuU149MtCBSkDnlYJGWMFq4BOXAs3ugfqU6Hl0EMPrZ/vs88+Zf/99+8KYjVzv5NOOqlWr1psscXq7d1JJ530e/0dAL4NGfsyJqbFc9r9pZXVWWedVStXpZXLzjvvXMNSORfJuUrGwnxPEyrIxaS4/PLLy6uvvtrTvw7wLfnBF3b8GY4kUJBDr2yW5DZGbpYlLZxU3Q477FBLkzXlG1977bWy5ZZb1rK2KfeYEj3plZtE3SmnnFLLOI499tjlpptuqosKgE7SWpoxUrklX3cvx5hyjtksueSSS2rZsnyej63f272stzLfwLCuKbmYXrjZEMlhWbMhHGlxlZu2CaJ2l7lfKrOsttpq5YILLui6vQHQyRKoSrAgc8GTTz65ViOIjI0JF6Qyy6KLLlo3lROsyriZKgT64gK9QTOWffrpp+WAAw6oe4UvvfRSWX/99etFpPQLbxxzzDFdQfrc2E0YK4dsWTPnwC1jY8bIpp0qQCfKGJixrW/fvjWA37QBzH5ixsW777677LHHHrWi85hjjtnVUrp1PzHtpVV1ht5DoIDhTlJx2QhJj9sciKVMdw7IhnTA9sILL5S99967LghaZZGRP5xJHg9poxlgWNbau+ziiy+ulQfuvPPOOv5lsZB/K6644lcKFQgPAJ2mme8lTJDxLrfIVlhhhRosyGOpSvXKK6/UDeSUcGwqEjTj3ZtvvllL3jblHAF6i4MOOqiuj7PePf30079yqEBfXKA3zA0Tsk9oNG1PmyosOQybb775ajWXPNfIPmFCBU3FqsaUU05Zb+S6eAR0ur/+9a91bzCVmTM/7B4mSLu/BPFTzSrjZdq9JFiQOWL3MxagdxAjZ7iTVF1TmjF/3O65556uDeLu+ZqU7jnjjDNqC4S0Pkgyb9xxx61f549jPgfoJBn3mg3fTP5TsjGbwOnxmN5o2TxJH92U/k4Js5hpppm6glcJFeTGRlLIKXlrgQB0moxbKdedstwJDrRukCQs8Mc//rE+no3iHKLtuuuudd7XhKdSoeqzzz6rpR3TLqG5qQHQ6TK/y7wwofpf/vKX9bGEClrbH6RKSxMqSIusBE+1/wM6fW6Ym7VrrrlmefDBB+v4t9VWW9XDsWuvvbZcccUVtYLLEUccUfcDI8HTrJMfeuih2lM842Bu4aZfeNq+AHS65vykqeSXj5kDdg8TRKq7bLbZZmWDDTaoa2d7hdA7CRQw3LnssstqWu7Xv/51ue6668pVV11V03bnn39+3RBuvV3RlDxbe+2169du4gKdrpnUp9/jwQcfXJZccsna8iWbIelxdtddd5Wjjz66HqDlwCw3MVpDBRkfL7zwwnqQlpsXE088cQ//RgBfP1iVm7epzJK2BhnvIhvIqU6QqgPZUH7xxRdrS4McpG2zzTa1f3i89957ZeWVVy6/+93v6tzR/BDoJEO7MdY83sz9vixUkMoE/fv3ry0Ec6NXoADoRK37f5n3JVyfIMG+++5bW5/mUCzr5VxMOu2002rlqiOPPLIrVJC5Yf5tuOGGPfybAHz7MvZF9gpTpWrZZZete4bdwwRNKDXVoKebbroe/ImB75qWBwyXsmGchcHf//73svzyy9dSt/l43nnndYUKsjHcfaOlCRjYOAY6WRYDCVL169ev3sDtXo7xhBNOqKGrSGuXTTbZpOu5hx9+uPZHW2aZZeqGCkCnSSBgwQUXLP/617/Ko48+Wud2Tz31VA1NpTpBqrOkSktawqyxxhr1e9Zdd92y44471jYHkcDVSCONpMw30FGa9WxCAGkFmH85DMt4lrLerWNawqcJFQyt/UHeI5vLE0wwgbEQ6BitFUrzMVX6/vKXv5TXX3+9Bu6fe+65Wr2vGS/j5ZdfriGDP/zhD7UKwVFHHVV+9rOf1efyuox/re8J0Clax60mXNo8lsotafnywAMPlPHGG6+89dZbdSzMfmGq9rXuIWbOOM8889RKz+OMM04P/kbAd0mggF7tq0zmczi21lprlSeeeGKwUEHj5JNPrhstTblvgE6/hXbiiSeWLbfcsisskLEy/1pfd9hhh9XEcUrZpm9ayjY242mqEzSLB5smQCfKLbNs/qYkYw7EDjnkkLqJnM2RY445put1mRteeeWVdUM55R3TEiYVWwA6TXPo//bbb9f1bwJVafMy55xz1vEtrV+aHrjNIdrQQgXZYB5hhBHq53rkAp2gdQ3bSLg01QZy43a55ZarwYFUsGqCU626hwpS1S/VCwA6fW7Y7OtlXdxUHWgeu+GGG+qaOWcjmTNmf3D88cfveo+sj9NKNUGsVIKeaqqpevA3Ar5rAgX0+j+K2eB4//336x++cccdt6tcT+vmR/o+prRtQgUp35Me4dkgyc3d3Xffvbz22mu1l+6EE07Yo78TwFdx33331ZsVq6+++hCfz4FZEsQXXXRRWXXVVQfbCG4WDSlhu8oqq9TxMZsqWTh0Dw8IEwCdpnXcaqoMPPPMM/XmxbzzzlurEmQOmB6QI488cq1QkOdzczcbyQmiunEBdPKBWsIDGcvmmGOOOg5mrZvHU73qzDPPLGOMMcYQQwUZE3OA9qtf/aqnfw2AryWBqcznMp5NPfXUXY9nrzAtrBI0TYWCjH+PPfZY3fsb0lq3NVSQ27ppnbrYYov1wG8E8N9p5npZ9x5wwAH1TCRB05VWWqmugSeffPKu6n6p4rfffvvVcXLppZeue42pVHXttdeWK664oo6ZCRN0r34K9D5i5PRKTcmx/FFM2drFF1+8zD333PVALH1yczgWOUBL8CA3zf70pz/VP3y5hZYSPQkYbL755jWx/NBDDwkTAB0hrVwyhqUveG5aDElTheWqq66qty9ab5U1myZTTDFFmWaaaeoYmXBC63PdXwswLEpYqruMW83jze3as88+u7zzzjtlgQUWqI9l3MvBWTOmLrLIIrViVUo9JkwwpPcFGJY190hOOeWUulmcjeN77rmn3HrrrfVALP1uU/L75z//eT1gywZz1tSx11571dc3G84pDw7QKVKN5bjjjqt7fgkEtEqAYPvtty/bbLNN+clPflLHv9y0/cc//tHVwqBVqvalemmqvHzwwQddB24Aw7rsD3700Uf184xtTQushRdeuFbqu/TSS8vtt99eK5VuttlmtRJBjDnmmPWM5Pjjj6/zxauvvrpsvPHGZdttty133HFHvaSU+aQwAQwfBArodbIJnD+K+SOZDeAjjjii3rjIAVvK9iR9nL7fl19+eX19ggdNqCCPJXjwt7/9rQYLZpxxxvpHUWlboFNkYZC0cEo3Zgxr1WwMJ2TVp0+fupH89NNPt31/s3HSlDrL5gpAJ8l4l7BUNkkyzt1yyy21hGOConm8tTJLNpOj+brpA57yjU899VSdB84666y1ypXS3kAnakKgN910Ux3TErqPscYaq5bsvvDCC+vj11xzzRBDBXvssUddV+f7U9IWoFNkTZxWf6nAkgotadny4osvdj2fsGjaAObfBBNMUENWeW3GwSGFCiaeeOI6R3z22WdLv379euA3Avh69txzzzL//PPXIH3Wxxnbsi7OnC9VSTP+3X///bUNdMbJ66+/vlZjSfW+SLuYlVdeue4hpqpzqrQkpHr33XeXM844w1gIwxEtD+hVmpJkuT2R/mdJ1qW0dxLEOTxLKZ70DX/hhRdqT5/0CM/rupf6SZme3OBNui4LCoBO0pRrzA3bbP6mHOO666472PMJHSRNnOBBksa5XZFDsmYczfiZpHE2TJJMnmiiiXr0dwL4tvuEZxMlrQxyY22dddapvSAPPPDAWgo3GyUpf5uxMRsqGUcBOnEsbJVQaTaNs4HcjIGNxx9/vI6Z2VjO/DDlbbu3P4juXwMMq7oHQbPft+CCC5bpp5++7hO29vrORaQckCUskDEuwatU/cs4qNUf0Ml++9vf1uorqcZ3yCGHlA03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iKVPePqD5+PYY49d+vbt2xYqyG3dO+64o0wxxRT1kC0HZrmVkU2TtDPI5sptt91WJp544iGOh817AQzLMn799Kc/rWNhqqtkLGvmiwlUJVTwwQcfDDVU0IyVKX2b22jjjjtu11gLAEBn+t3vfleDpqm8lxanCYxecMEFNVz/2GOPlRVXXLEceeSRtVpV1tV5/NRTT63r5ARNm4oGAN8HgQIA+I5u5e6///51QZAwQSOBgqSOc+u2eV33UEHaHPzsZz9rq1QAMKzTJxxg8HBp5PA/G8IZB1dZZZVaYSBjYBOSSqggPXM//PDD/xgqSFustENoQloAAHTW3LD5+tFHHy0bbbRRefDBB8vVV19dFl100Royveiii8rxxx9fqxhE2hr84x//qOvltEI4++yz65wQ4PskUAAA34G99967BgqmnHLKWq47QYOUtX311VdrqviXv/xlOeWUU4YYKphggglqpYJsOKtOAHSalGnMRkjCBKk4kI2Shx56qD6322671bExjw2ppHduXqQyQb4/z+drYQKgkzRj1nvvvVerESQg1adPn3LggQeWHXfcsfbBbbRWXmkNFaRPbl6fUEFTiSBj5RJLLFFuv/32+nxuqAEAMGxr5nIJAyQcOsccc5QxxhijrUpBgvV//etf60WjvDb7h9kjvPfee+saOy0Cc/loueWWqwEDgO+bQAEAfAtaD7ySIF555ZXrIiGbwTPMMEN9/JlnnqmJ4/Q6y+3d3NRN6bImVJCgwbbbblvLl+VfUsoAnUafcGB4r1SVyixpYZXbZo0EB9IT94gjjqiB0yGFCrKJvOGGG9ZN43333bfstddebRvR2XRuHgcAYNj38ccf1/YE2fdbcsklywEHHFD69evX9fyyyy5b9wsTGN1mm20Ga+uXeWDWy6OOOmoP/fQA/0egAAD+S60bwak08MQTT5Q555yz3HTTTWXhhRceLGyQW2cXXnhhvVmWjeFUKUgJ3OZQLd+fA7XczgXoNPqEA8O7zPWyKXzfffeVNdZYoyywwALllltuKeeff34dCxM23WKLLcroo48+xLnkxRdfXH7zm9+UK6+8crDgQfexsLXNFgAAw65LLrmkrL766vXzpjpBgvhZ//bv37/uH6611lplookmKtddd10Zb7zxutbJzfFd5oqtc0aA75vVJwB8Qzkki2Yyv/7665fRRhutnHfe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IossUhcPCRPk0A1gWNVkjzMeNv3CU21ll112KRtssEHp06dPOfnkk2tgKuNbI2GCZnz79a9/XU499dRy22231TCBPDPQaTIfzBi3zDLLlKeeeqrsvPPO5bnnniv3339/LV+78MILl7vvvrtuEOfrjH8ZK/O6BK7SFmaLLbYoV155pTEQAGA40RomiCWWWKKceeaZtZJVc1Fp1113FSYAOoIKBQDwH1LEmdwnUDDHHHOUnXbaqbYwGFKf269SqWDttdcuF1xwQf08oYLpp5/+e/29AL4KfcIB/k+zZZJ+twceeGDZcccdywEHHDDYxu8MM8xQ3n///doLN2NhM++LhFATOL3iiivqrbSJJ564R34PAACGHZkjvvPOO7WSH0AnECgAgC9x7LHHlm222aastNJKdYM4rQq+TGuoIIGCBAu6H6KlN1puqD322GNluumm+15+D4CvSp9wgHapQvDyyy+Xv/3tb2W00UbrGgPnm2++8sQTT9Q53/bbb1/Hx4QLWsfBTz75pI6tqeoiWAUAMHwzHwQ6kUABAAzFSy+9VJZbbrnaG/faa6/tChN074HW3XnnnVfWXXfd+vldd91V5p577sEO6SJ9x91QA4Y1+oQDtG/yvv7666Vfv351/MucMPO5hAnmn3/+8uSTT9YKBDvssENXZYKLL764DBo0qAwYMGCweeN/mkMCAADAsOiHPf0DAMCw6tlnny2PPPJILV+bMEHTD/w/bQSvs846tV94bvY2YYLI5nM2qEOYABgW6RMODG+a+V0jAdCMhe+++24NhubrzP3y78UXX6xzuVQcGFqYIM+nJcIdd9xRPvzww8HmjcIEAAAAdKL/uyYJAHRpbo89/vjj9eumqkD6iA/ttbm5+9lnn5XJJ5+8Pr7RRht1vabpQR5KmgHDqiYA8Pvf/74GCNInPMGB9AlveoVnrJtwwglr64Pxxx+/a2xrQgW5sZs+4YsssoiDM6AjZBy75ZZbag/bVVddtc77MtalLdU000xTqw1MMskkZdlll61hqbS3Smg0YYK0eUmbgyZMkHF01113LY8++mit3JKxEQAAADqdCgUA0E1zCNa3b9/68e23364fm+oCjdaytSlpe8IJJ9Qba90NKYgAMKxpbuDeeuutZcopp6y3bpsgQYICCRE8/fTT5de//nV9Lgdo6RPeyMFZAgipYJAqLN3HTIBhtSLVoosuWlZfffVy8803l3/84x+1+kACoSuvvHJt+xILLrhgneelCsszzzxT9t9//xomGHnkkevzef2xxx5bzjzzzPratL8yBwQAAKA3sLoFgKGYaKKJ6i210047rd5cS3WBhAjyL5vGTZggvXSPOuqoWv5biW+gk3Q/9E+f8HvvvbdWW2lu3DZ9wtMCYd99962lvZsDtOuvv77exo2Mf6OMMkrp06dP/VxFFqAT/OQnP6lBqVh66aXL9NNPX95888063u2yyy5dlaq22Wabstpqq9XWLj/+8Y/LFFNMUeeCTQuEjI277bZbDVedddZZZZxxxmlrpwAAAACd6AdfOPkAYDjV2opgaLbaaqty/PHH19u2F1xwQT1Ua3XnnXfWsuBpj3DeeefVvuMAnSB9wXNQlj7hCQvMOeecteR3v3796o3clOzOQdm888471D7h+Z7RRhutlgEfffTRe/pXAvjGc8Gtt966zvli/fXXL6effnrXa/KvCRakksEll1xSx76Ml2OPPXZ54YUXaqWDWWedtVx22WVlsskmq2OkYBUAAAC9gUABAMOl1k3eu+66qzz33HPlb3/7W5l22mnLPPPMU2aYYYb6XA7aNt5447o5nEO04447rj6X6gU33XRTOeyww8ojjzxSS9xuueWWPfxbAXy51j7hMaQ+4WuuuWYNCBx99NFtfcKbygRZQuy88871NekTnoM4pb2BTpXAwEwzzVSeeOKJ+vUII4xQx8TllluuLYQVhxxySBk4cGCtUpXH5pprrrLEEkvUdgjjjTeeMAEAAAC9ikABAMP1bbQDDzywtitIcKApS5ue4QMGDCirrLJKmXTSSWvY4Le//W0599xz6/P53rzm008/rbfTDjrooFrJoPt7AwxLcnt2qqmmqp/feOONZZZZZqkVBt5+++1apjsBgRyMJSSw3Xbb1ZLeGc8SJkip79Y+4QlX7bfffmXmmWcuF154YS3tDdCpPvjggzofHH/88etYmaBUQgWpPtUEsLqHCuKVV16pH1PJKlsraYFgLggAAEBvI1AAwHCl2eyNPffcsxx88MFlxhlnrIGAlOt+8MEHy2mnnVYDBrvvvns9ROvbt299fQ7ZBg0aVB577LFarWCppZYqP/3pT8uiiy5an7eBDAzrUkkgYYAclI055pjl448/Lvvvv399vPU27RprrFFv5yY0dcopp5SVVlqpBgz++c9/lj322KM+llu4t912W61qYPwDOt1nn33W1dJl1113HWKooBnrMp98/fXX6zjYBAxa55gAAADQmwgUADBcyubweuutVxZZZJFy+OGH15u6jZVXXrn85S9/qRUKjjzyyFqloJGN5E8++aQevDW3dZvHHaYBwyp9wgH+s9ZQQIKlqVg1pEoFCZmmOkuen3/++XvwJwYAAIDvnkABAMPlRvE666xTD8NuuOGGMt9883U9nxYIe+21V72Nm43kueeee7DvjWaj2U00oNPoEw7w1QNYraGCM844oyy88MI1SJD5YtokJGA14YQT9vSPDAAAAN8pgQIAer3uB/9vvvlmmXrqqWvv75Trbp5PP/D0Cl922WXrRnFTtSCvyc3cGWaYoQd/C4D/nj7hAP9Z6/jWtMjKmDjuuOPWVgeTTz55ufnmm+tHwSoAAAB6O4ECAHq11k3e9P4eccQRy/vvv1+mmGKKMu2005a77rqrPrfvvvvWf93DBLHhhhvW1w0aNKj06dOnx34XgG+DPuEAXy9UkBYHl156aXnrrbdK//79y2GHHVYmmmgiYQIAAACGCwIFAAwXG8E5NEuYIL3DRx999Fry+7333qu3y1K6dv/99x9imCD9w3/+85+XLbfcsm4et97YBehU+oQDfL255DvvvFM/jjLKKGXkkUcWJgAAAGC4oUYpAL1WswGcHuC5gXvNNdeUjz/+uN7MTUjg3XffLeuss85QwwR33nln/d4JJpigrLbaasIEQK/RtCyIlPJO6Orzzz+vY+If//jH8tprr9UwQcbFe++9t0w55ZQ9/SMDfO+aSi0xzjjj1H8JE+QxYQIAAACGFyoUANDrtN4Ye/7558vyyy9f+vXrV/bbb7+uwEBaGKy33nrl73//e5lsssnKMcccU1ZYYYWu97juuuvKAQccUAYOHFhOPfXUstFGG/XY7wPwXdEnHAAAAAD4MgIFAPTaMt4JE+RALGW6U51gySWXHOz5iy++uLYySD/cZZZZpr5u4oknLo8//ng54YQTykcffVR+//vfl+23377tvQF6C33CAQAAAIChESgAoFfaeuuty3HHHVe22GKLcs8995Q77rij3rrNwVlCAU0w4Morr6wHZinpnQBBpI94DtK22267Wv67+4EbQG+jTzgAAAAAMCQCBQD0SptuumltVfDjH/+4/Otf/yo33HBDWXTRRbueb6028OKLL9ZKBinrncfmm2++Wqmg6RkuTAAMD4ZUhUVlFgAAAAAYvv1PT/8AAPBtag6/Tj755DLaaKOVI488slYmGDhwYFlggQVq9YHIa5rXTjbZZPXf3HPPPcT3EyYAhgdDCg4IEwAAAADA8E2FAgB6nX//+981RBDbb799Oeqoo2rZ7rPOOqusttpqPf3jAQAAAAAAdASBAgA61pe1Imh9bscddyxHHHFE7Qd+/vnnlxVWWOF7/kkBAAAAAAA6j0ABAB3pf//3f8uPfvSj+vnNN99cnnnmmfLaa6+VMcYYoyy77LJlggkmqC0PGjvttFM5/PDDhQoAAAAAAAC+IoECADpOa/WBvffeuwwYMKB8/vnnXc9PPfXUZeGFFy777LNPmWiiiYYYKvjjH/9Yll9++R75+QEAAAAAADqBQAEAHWv//fevgYIZZpihrL/++mXkkUcuF110UXnqqafKG2+8URZaaKFy7rnnlkkmmaQtVJDqBgkVrLbaaj36OwAAAAAAAAyr/qenfwAA+LptDpKFS4uDs846qyy33HK1QkFCBfGLX/yitkDYb7/9ysCBA8sWW2xRTj/99DLuuOPW5w877LDy73//uxx99NHl9ddf7+HfCAAAAAAAYNilQgEAHSF/rn7wgx/Uz5977rny4x//uEw22WTliiuuKMsss0x9Pq0QEjhI+4Mbb7yx7LDDDuWFF14oRxxxRNl0003r4yOMMEJ9j4QNUsEAAAAAAACAIfu/BtQAMIxrwgQbb7xx6devX/ntb39bZplllrLgggvWxxMoSJggEhrI46uvvnr59NNPy1//+teux1PlIJowQUIIAAAAAAAAtBMoAKCjrL322vXjGWecUR555JFy00031a9/+MPB/6SNNtpoZY011ih9+vQp999/f3nrrbfq403ooNH9+wAAAAAAAPg/TlEA6CiLL754V4gg1QYGDRrU9pqm6sAUU0xRxhlnnPo6wQEAAAAAAICvx+kKAB1n4YUX7goVHHTQQeXMM88cYnuE22+/vbzwwgtl3nnnrRULAAAAAAAA+OoECgDo2FDBzTffXD//5S9/WY4//vjyyiuvdAUKEiY48MADa7WCtdZaq4w44og9/BMDAAAAAAB0lh988cUXX/T0DwEA39TAgQNruCAWWmih0rdv31qN4MorrywffvhhOfjgg8s222xTn8+fvKZ6AQAAAAAAAF9OoACAjnfrrbeWRRZZpH4+7rjj1ooEI400Ug0aLL/88vXxVCr44Q8V5gEAAAAAAPiqBAoA6BXS/mCxxRarn1900UVl1VVX7XpOmAAAAAAAAODrc7oCQK+QCgUJFcTqq69eLrjggvq5NgcAAAAAAADfjAoFAPQqAwcOrK0O4sILLyyrrbZaT/9IAAAAAAAAHUmgAIBeHSq49NJLy0orrdTTPxIAAAAAAEDH0fIAgF5noYUWKtdff339vF+/fj394wAAAAAAAHQkFQoA6LU++eSTMsooo/T0jwEAAAAAANCRBAoAAAAAAAAAgDZaHgAAAAAAAAAAbQQKAAAAAAAAAIA2AgUAAAAAAAAAQBuBAgAAAAAAAACgjUABAAAAAAAAANBGoAAAAAAAAAAAaCNQAAAAAAAAAAC0ESgAAAAAAAAAAEp3/x8YAJi5cEIfWQAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 2000x1200 with 2 Axes>"
      ],
      "image/png": "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AAAAQGFpLQUAAAAAQKlUtdNaqpKoyAAAAAAAAApLkAEAAAAAABSWIAMAAAAAACis0gUZr7zySlRVVUXPnj3n2jkHDhyYz3n33XdHUVxyySV5TbvssktrLwUAAAAAoFCqqttV5FZWpQsyvknHHHNMDhPSbdHDGAAAAAAAKKJ5omR69OgRzzzzTLRv336unfOyyy6Lzz//PJZaaqkoim222SbWWmutWGCBBVp7KQAAAAAAMMdKF2SkAGP55Zefq+csUoBRLwUYQgwAAAAAgBmVuU1TKVpLpZZGaUsuuOCC6NevX8w///yx4IILxpAhQ+LBBx9s8nWpDVJ6XWqLdPPNN8eGG24YCy+88AyzJT788MM4+uijo0+fPvHtb3875ptvvlh55ZXjN7/5Ta56mJlHHnkkdt5551h66aWjU6dO+dyrrrpqHHLIIfHqq6/OVlumOb22pmZkpMfHHntsvp9u6889/dyKp59+Ol/vOuusk6tFOnToEIssskhsvPHGce21187wXum16RqTdF3Tnrd+7bMzI2PcuHHx4x//OLp3757fc7HFFostt9wyxowZ0+Tx6TzpfOm8L7/8cvzsZz+Lrl27RseOHWPZZZeNI444IiZNmtTkawEAAAAA4BufkTF8+PDYa6+9ctDwgx/8IJZccsn4+9//Huutt17ceOONM33dH/7wh9h6663jk08+icGDB8cGG2wQ7dq1a/hRP4UPxx13XLzzzjux7rrr5h/033333TjyyCPzj/0fffTRDOc8+eSTY4011sgtntKP8mk96bVTpkyJU045Je66665v5NqmlUKVdC1Juk2P67e0tnqnnnpqvt4PPvggBzbbbrtt9O7dO695++23z2uZVnrtdtttl++nkGXa86ZtdqSQZsCAAXHdddflMOKHP/xhLLfccvHXv/41Nt1004YApinjx4/PIdO9996b/+3WX3/9mDBhQvz2t7+NHXbYYbbeHwAAAAAAZldVXV1d3Wwf/X+VBsm8886bf/hOlRXTBgqHHnpobmn0n//8J/+Vf71UAZEqCFJoccMNN8RWW23V6LxffPFF/iH/xRdfzH/dn4KLFEokqRJj9913j6uuuiqGDRsWo0aNanjdLbfcksOGVIVx6aWX5iqDaaVwJK15hRVWaKjISBUN3/nOd/L9uXFtqSLjn//8Zw4f0v16ach3CgVSxcXMBn6n16WgZJlllmm0/7nnnsshzuuvvx5jx47NQU29WV1DvVQ5kT6rFG6k+/WeeOKJWG211aKmpiZ/Xqmyol4Ka1LINHny5Ljttttik002aVSRkY5Pfv3rX+frqg+gnnzyyTyP47PPPov7778/hyQAAAAAAEXVc/drohK9cuH2UUZzXJGRKham/aE/SW2c+vfvn6smLrzwwiZfl35Ynz7ESNKP5CnE2GKLLeL4449vCDGSVBlx/vnn5/DgT3/6U24/VS+FBEmqCJg+xEhWXHHFhhCjpa9tTqSqhulDjCRVZaQwJ7n++uvn2vudccYZMXXq1DwMfNoQI9lss81izz33bAhumpLabaV/n/oQI1lppZUaznX77bfPtbUCAAAAALTUjIxK3MpqjoOMmbUxGjp0aL6ddl7EtFIbo6bceuut+Ta1U2rKt771rRwkpB/hH3roobzvrbfeyq2OqqurY7fddou5ZU6vbU59+umnuc3T4YcfnoOEVP2Qtj//+c8N1RlzS/3aZzY7o/5zTK2jUtXG9FLQNO0sjnr1YdEbb7wx19YKAAAAAADzzOkL6wdOz2x/aonUlKaGbCcvvfRSvk1/2T99pcD00syM5LXXXsu33bp1yy2f5pY5vbY58Ze//CW3gHr//fdneszHH388196vPmiY2TWmwd3Jl19+mdc0bQutZKmllmrydZ07d254HQAAAAAAtHqQ8VVmNnojzZ9oSm1tbb5NA8AXX3zxWZ47zYZoTc0cKzLLUCFVoKT5IGn+xo477piDnlR9kqpM0pyKQYMGzbX3mxvSugAAAAAAoPBBxssvvxx9+vSZYX/98OkllliiWedLA6+fffbZ3NpoZu2npldfHTBhwoQ8u2JuVWXM7WubVTVGCjHSvIoTTzxxhueff/75mNt69OiRZ5GkCpg022JmlTFpePrCCy88198fAAAAAKC1VVfP2D6f4prjP69PQ7dntX/gwIHNOl8aNJ1ce+21s/2arl27xqqrrpqrOUaNGhVzy9y6tvqB5WmuR1M++OCDmVaYpCqMK6+8co7OOyv1a7/kkkuafL7+c1xvvfVinnlarGAHAAAAAABaNsg455xzZhh6fdppp8W4cePi29/+drOHb6ch1+kH/TT0+le/+lV88sknMxyThntfcMEFjfYdffTR+fbXv/51w3DsaT399NPxzDPPtMq11VduPPXUU00+Xz8g+/rrr89VJfXSkO2jjjoq7r///iZft+iii+YwI30e9WHI7Np///1zQHHTTTfF5Zdf3ui51MrqvPPOy/cPPvjgZp0XAAAAAABawhz/yf1ee+0VG264Yf7L/dSu6Mknn4wnnngi2rVrl/+qP1VLNMf8888ft956a2yxxRZx0kknxfnnnx+rrLJKDgM+//zz+M9//pMDiTR8eo899mh4XWrL9Nvf/jaOOOKI3JJq+eWXz1UaqWXTCy+8kIOMiy++uCE0+CavLc23SNeVQoN11103lltuuXyOddZZJw/43nLLLaNfv37xyCOPxHe/+93YYIMN8vFjx46NN998Mwc6TbWcat++fWy11VY5AEktsNK555tvvvzchRdeOMs1rbzyyjFy5MjYe++981D1FNCkz+zVV1/NwUmqBDnmmGNi0003ne3PCwAAAACgklRpLVWOICP9AN67d+/8F/wPPfRQ/nE9Deo+8sgjY+21156jc37ve9+Lxx9/PM4999y48cYb8/0HHnggunTpkgONVCWQgovpHX744Tl4OPPMM+Oee+6JG264IVdOpLkbaYh2eq41ri0NLf/73/8exx13XA4r0rWkNlipJVQKMlJlRKr8OOGEE3I1yR133BGdO3fO75Eep6qUpoKMJK1tkUUWyedPgcaUKVNmK8ior35JYc8pp5wS9913X/6c03yRIUOG5IqNTTbZpBmfFgAAAAAAtJyquvQn+M15QdV/k6pmvqwitOVrAwAAAADgv3r94oaoRC/8cdsoozmekQEAAAAAAFDY1lIAAAAAAFDJ3XmoDCoyAAAAAACAtlOR0ZbnR7TlawMAAAAAgEqktRQAAAAAAKVSXa21VCXRWgoAAAAAACgsQQYAAAAAAFBYggwAAAAAAKCwzMgAAAAAAKBUqszIqCgqMgAAAAAAgMISZAAAAAAAAIUlyAAAAAAAgDZq5MiR0bNnz+jUqVOsueaaMW7cuJkeO3DgwKiqqpph23zzzRuO2WWXXWZ4fvDgwS16DWZkAAAAAABQKmWZkXHNNdfE8OHD49xzz80hxumnnx6DBg2K5557LhZbbLEZjr/hhhti8uTJDY/ff//9WHXVVeNHP/pRo+NScHHxxRc3PO7YsWOLXoeKDAAAAAAAaINOPfXU2GOPPWLYsGGx4oor5kBjvvnmi1GjRjV5/MILLxxdu3Zt2MaMGZOPnz7ISMHFtMcttNBCLXodggwAAAAAAKgAkyZNio8//rjRlvY1JVVWPPLII7Hxxhs37Kuurs6PH3jggdl6v4suuih22GGHmH/++Rvtv/vuu3NFR+/evWPvvffOlRstSZABAAAAAECpVFdVVeR2wgknxAILLNBoS/ua8t5770VNTU0svvjijfanx2+99dZXfkZplsaTTz4Zu++++wxtpS677LK444474sQTT4x//vOfsdlmm+X3ailmZAAAAAAAQAUYMWJEnnkxrZaaT5GqMVZeeeVYY401Gu1PFRr10vOrrLJKLLvssrlKY6ONNmqRtajIAAAAAACACtCxY8fo3Llzo21mQUaXLl2iXbt28fbbbzfanx6nuRaz8tlnn8XVV18du+2221euaZlllsnv9cILL0RLEWQAAAAAAEAb06FDh+jXr19uAVWvtrY2Px4wYMAsX3vdddfl2Rs77bTTV77P66+/nmdkdOvWLVqK1lIAAAAAAJRKVXVVlMHw4cNj5513jv79++cWUaeffnquthg2bFh+fujQodGjR48Z5myktlJbb711LLLIIo32f/rpp3HsscfGdtttl6s6XnzxxTj00EOjV69eMWjQoBa7DkEGAAAAAAC0Qdtvv328++67cdRRR+UB33369InRo0c3DAB/7bXXorq6ceOm5557Lu6777647bbbZjhfalX1+OOPx6WXXhoTJ06M7t27x6abbhrHH398i83qSKrq6urqWuzsAAAAAABQMCsd/NeoRE+eskWUkRkZAAAAAABAYWktBQAAAABAqZRlRkZboSIDAAAAAAAoLEEGAAAAAABQWFpLAQAAAABQKtVaS1UUFRkAAAAAAEBhCTIAAAAAAIDCEmQAAAAAAACFZUYGAAAAAAClUuVP/CuKfy4AAAAAAKCwBBkAAAAAAEBhaS0FAAAAAECpVFVVtfYSaAYVGQAAAAAAQGEJMgAAAAAAgMISZAAAAAAAAIVlRgYAAAAAAKVSXW1GRiVRkQEAAAAAABSWIAMAAAAAACgsQQYAAAAAAFBYZmQAAAAAAFAqVWZkVBQVGQAAAAAAQGEJMgAAAAAAgMLSWgoAAAAAgFLRWqqyqMgAAAAAAAAKS5ABAAAAAAAUliADAAAAAAAoLDMyAAAAAAAoleoqMzIqiYoMAAAAAACgsAQZAAAAAABAYWktBQAAAABAqVRVay1VSVRkAAAAAAAAhSXIAAAAAAAACkuQAQAAAAAAFJYZGQAAAAAAlIoZGZVFRQYAAAAAAFBYggwAAAAAAKCwBBkAAAAAAEBhmZEBAAAAAECpVJuRUVFUZAAAAAAAAIUlyAAAAAAAAApLaykAAAAAAEqlqkprqUqiIgMAAAAAACgsQQYAAAAAAFBYggwAAAAAAKCwzMgAAAAAAKBUqvyJf0XxzwUAAAAAABSWIAMAAAAAACgsraUAAAAAACiV6uqq1l4CzaAiAwAAAAAAKCxBBgAAAAAAUFiCDAAAAAAAoLDMyAAAAAAAoFSqzMioKCoyAAAAAACAwhJkAAAAAAAAhSXIAAAAAAAACsuMDAAAAAAASqWqyoyMSqIiAwAAAAAAKCxBBgAAAAAAUFhaSwEAAAAAUCrV1VpLVRIVGQAAAAAAQGEJMgAAAAAAgMISZAAAAAAAAIVlRgYAAAAAAKVSZUZGRRFk0Ko69N21tZcAtJDJj41q7SUAAAAA0AZoLQUAAAAAABSWigwAAAAAAEqlndZSFUVFBgAAAAAAUFiCDAAAAAAAoLAEGQAAAAAAQGGZkQEAAAAAQKmYkVFZVGQAAAAAAACFJcgAAAAAAAAKS5ABAAAAAAAUlhkZAAAAAACUihkZlUVFBgAAAAAAUFiCDAAAAAAAoLC0lgIAAAAAoFS0lqosKjIAAAAAAIDCEmQAAAAAAACFJcgAAAAAAAAKy4wMAAAAAABKxYyMyqIiAwAAAAAAKCxBBgAAAAAAUFiCDAAAAAAAoLDMyAAAAAAAoFTmMSOjoqjIAAAAAAAACkuQAQAAAAAAFJbWUgAAAAAAlEo7raUqiooMAAAAAACgsAQZAAAAAABAYQkyAAAAAACAwjIjAwAAAACAUjEjo7KoyAAAAAAAAApLkAEAAAAAABSW1lIAAAAAAJRKu2p/419J/GsBAAAAAACFJcgAAAAAAAAKS5ABAAAAAAAUlhkZAAAAAACUSrvqqtZeAs2gIgMAAAAAACgsQQYAAAAAAFBYggwAAAAAAKCwzMgAAAAAAKBUzMioLCoyAAAAAACAwhJkAAAAAAAAhSXIAAAAAACgdK2lKnGbEyNHjoyePXtGp06dYs0114xx48bN9NhLLrkkqqqqGm3pddOqq6uLo446Krp16xbzzjtvbLzxxvH8889HSxJkAAAAAABAG3TNNdfE8OHD4+ijj45HH300Vl111Rg0aFC88847M31N586dY8KECQ3bq6++2uj5k046Kc4888w499xzY+zYsTH//PPnc3755Zctdh2CDAAAAAAAaINOPfXU2GOPPWLYsGGx4oor5vBhvvnmi1GjRs30NakKo2vXrg3b4osv3qga4/TTT48jjjgifvCDH8Qqq6wSl112Wbz55ptx0003tdh1CDIAAAAAAKACTJo0KT7++ONGW9rXlMmTJ8cjjzySWz/Vq66uzo8feOCBmb7Hp59+Gt/5zndiySWXzGHFU0891fDcyy+/HG+99Vajcy6wwAK5ZdWszvl1CTIAAAAAACiVdlVVFbmdcMIJOTiYdkv7mvLee+9FTU1No4qKJD1OYURTevfunas1br755rj88sujtrY21l577Xj99dfz8/Wva84554Z5WuzMAAAAAADAXDNixIg882JaHTt2nGvnHzBgQN7qpRBjhRVWiPPOOy+OP/74aC2CDAAAAAAAqAAdO3ac7eCiS5cu0a5du3j77bcb7U+P0+yL2dG+ffvo27dvvPDCC/lx/evSObp169bonH369ImWorUUAAAAAACl0q66qiK35ujQoUP069cv7rjjjoZ9qVVUejxt1cWspNZUTzzxRENosfTSS+cwY9pzpjkdY8eOne1zzgkVGQAAAAAA0AYNHz48dt555+jfv3+sscYacfrpp8dnn30Ww4YNy88PHTo0evTo0TBn47jjjou11lorevXqFRMnToyTTz45Xn311dh9993z81VVVXHAAQfEb37zm1huueVysHHkkUdG9+7dY+utt26x6xBkAAAAAABAG7T99tvHu+++G0cddVQexp3aP40ePbphWPdrr70W1dX/a9z04Ycfxh577JGPXWihhXJFx/333x8rrrhiwzGHHnpoDkP23HPPHHasu+66+ZydOnVqseuoqqurq2uxs8NX6NB319ZeAtBCJj82qrWXAAAAANCk/W98IirRGdusHGWkIgMAAAAAgFJp7rwJWpdh3wAAAAAAQGEJMgAAAAAAgMISZAAAAAAAAIVlRgYAAAAAAKUyjxkZFUVFBgAAAAAAUFiCDAAAAAAAoLC0lgIAAAAAoFTaaS1VUVRkAAAAAAAAhSXIAAAAAAAACkuQAQAAAAAAFJYZGQAAAAAAlIoZGZVFRQYAAAAAAFBYggwAAAAAAKCwtJYCAAAAAKBUtJaqLCoyAAAAAACAwhJkAAAAAAAAhSXIAAAAAAAACsuMDAAAAAAASsWMjMqiIgMAAAAAACgsQQYAAAAAAFBYggwAAAAAAKCwzMgAAAAAAKBUzMioLCoyAAAAAACAwhJkAAAAAAAAhaW1FAAAAAAApaK1VGVRkQEAAAAAABSWIAMAAAAAACgsQQYAAAAAAFBYZmQAAAAAAFAqZmRUlsJVZPTs2TOqqqrilVdeae2lAAAAAAAArUxFBtBifjpkrVin73djtRV7xkq9ekTHDu1jt6Muij/95V+tvTQAAAAAoEIIMoAWc8w+20bP7l3i3Q8/iQnvfZTvAwAAAEBr01qqshSmtdQll1ySW0q9+uqr+fHSSy+dH9dvd999d8Oxb775ZgwfPjxWWGGFmG+++eLb3/52rL766nH22WfH1KlTZzj3Lrvsks+R3uO5556L7bffPhZbbLGYf/758+tuvvnmhmPHjh0bW221VSy66KIx77zzxoABA+KOO+5ocs31a0suuOCC6NevXz7nggsuGEOGDIkHH3xwrrba+vvf/x4DBw6MBRZYIBZaaKHYYost4oknnmg49sorr8zrTZ9HWsO2224bL774YpPnveGGG2L33XePlVZaKZ+rU6dO+TPfdddd82c0vXQtHTp0yJ/J+PHjZ3j+8ccfz/8W7du3j3/9y1/b818/P+6S6DXkkOix4f5xwfX/+w4DAAAAAFRckNGrV6/YeeedcxCQbLfddvlx/da1a9e8/5577sk/vp922mnx5ZdfxiabbBLrrLNO/sF+v/32i8033zymTJnS5Hs8+uijOWz497//HRtttFGsuuqq8fDDD8c222wT119/fdx0002x3nrrxeuvv56f7927d/4Bf/DgwXHffffNdO0pVNlrr73yD/k/+MEPYskll8yhQzrXjTfeOFc+n/POOy9fWwpq0npSEHPrrbfG+uuvn6/90EMPzZ9TWkN6vnPnzvm90/MffvjhDOf78Y9/HFdddVUOJjbccMMYNGhQVFdXx8UXX5w/o/vvv7/R8WuttVb8/ve/z595eu0nn3zS8Fy6/6Mf/Si++OKL+N3vfpf/PSC5c+zT8dqE91t7GQAAAABABauqq6uriwJJFQipKuPll1/O96f11ltv5RDjgw8+iJEjR+bwIP34nrz//vv5B/Y777wzjj322DjqqKMaVWRceuml+f5v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emy4f1xw/f++q0Dl8/0GAAAAvimFDzJ69eoVO++8c/7BPNluu+3y4/qta9euef8999wTK620Upx22mnx5ZdfxiabbJJ/YE8/2O+3336x+eabx5QpU5p8j0cffTSHDf/+979jo402ilVXXTUefvjh2GabbeL666+Pm266KdZbb714/fXX8/O9e/fOYcTgwYPjvvvum+naU6iy11575VDlBz/4QSy55JI5dEjnuvHGG+fK53Peeefla0tBTVpPCmJuvfXWWH/99fO1H3rooflzSmtIz6fwIb13ev7DDz9s9vsdffTR8aMf/SjfT6HMcsstF/fff38OT+bWNdF23Dn26XhtwvutvQygBfh+AwAAAN+UwgcZ6S//U8VEly7/bVlxyimn5Mf1W2qF9NZbb+Uqg4kTJ8Yf//jH/AN+qqYYPXp0PP/887HhhhvGbbfdFieccEKT73HWWWfFiBEj8nyIq666Kv8wf+aZZ0ZdXV0ceOCBseuuu8ZFF12UA4+rr746xo8fHwcccEAOD4499tiZrv3cc8+N22+/Pe69995cFZGqJE466aT8umHDhsU777zztT+fFNyMGTMmByrXXHNNPP300zloSJ/F1ltvHaNGjcqhTKoeue666+LZZ5+NtddeO1evpM+qudLn8sADD+T3q/8sUriRPqvDDjvsa18PAAAAAEBLS81nKnGbEyNHjsxdeDp16hRrrrlmjBs3bpbHp9+R0+/u6fiVV155hm486bfgo446Krp165a7F2288cb5d/hSBxmz4/TTT4/3338/9tlnn9h7772juvp/l7XIIovEZZddluc/pBZT6UOe3hprrBGHH354Q+ukJJ1n4YUXzlUY6R/iZz/7WaPXHHHEEQ2VIDOr9EjVGClEmdYhhxwS/fv3j48++iguvPDCr33tv/zlL3OVSL127drlUCZ58skn47jjjssVJvVSZcZBBx2U78+sNdaspPOl/9inld4vtbX6z3/+E//v//2/r3E1AAAAAADMLddcc03uHJT+GD39oX76rXjQoEEz/SP79Ef+P/nJT2K33XaLxx57LP+xfNrSb8310h/rpz94T3/In0YypG5K6ZypU1JLaRNBRmqllKQZF03p0aNHboH07rvvNpkMbbbZZo1CjGSeeebJ8zjqWyhNLwUkKeiYPHlyDlGaklo6NWXo0KH5dtr5HnOqqbWla52d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FRkAAAAAAEBhCTIAAAAAAIDC0loKAAAAAIByqa1p7RXQDCoyAAAAAACAwhJkAAAAAAAAhSXIAAAAAAAACsuMDAAAAAAAysWMjIqiIgMAAAAAACgsQQYAAAAAAFBYWksBAAAAAFAqdTVaS1USFRkAAAAAAEBhCTIAAAAAAIDCEmQAAAAAAACFZUYGAAAAAADlUlvb2iugGVRkAAAAAAAAhSXIaKN22WWXqKqqiksuueQbeb+77747v9/AgQO/kfcDAAAAAKAcBBkAAAAAAEBhmZHRRp1wwglx2GGHRbdu3Vp7KZTYT4esFev0/W6stmLPWKlXj+jYoX3sdtRF8ae//Ku1lwZ8Tb7f0Hb5fgMAUAq1Na29AppBkNFGpQBDiEFrO2afbaNn9y7x7oefxIT3Psr3gbbB9xvaLt9vAACgaLSWKpC6urro0qVLVFdXx/vvv9/ouXHjxuUZFGn74x//OMNrl1lmmfzcSy+9NMsZGcccc0zen27ffffd2GeffWLJJZeMDh065Nv99tsvJk6cONM1XnbZZbH66qvHfPPNFwsvvHAMHjw47r333rn2GdC2/Py4S6LXkEOix4b7xwXX393aywHmIt9vaLt8vwEAgKIRZBRIChg23HDDHGjccccdjZ67/fbbm7yfpPDi5ZdfjqWXXjoHGrPj//2//xerrbZa/PnPf4411lgjNtlkk/jkk0/i7LPPjk033TSmTJkyw2v233//2HnnnePRRx/NYcagQYPyedKA75tuummOr5u2686xT8drExqHckDb4PsNbZfvNwAAZVBXW1ORW1kJMgpm4403bjKsSI9T1cTyyy8fd911V9TU/O8/2vpj6187O0aNGpWPf/XVV3OYceutt8YTTzwRPXr0iIceeiiuv/76Rsen588888yYf/754+67745//vOfcdVVV8VTTz0Vv/nNb+KMM874mlcOAAAAAAAzEmRUQJDxxRdfxP333x8DBgyILbfcMrd+evjhh79WkLHEEkvEyJEjo2PHjg376ltLTf/+yemnn55v991331hvvfUaPTdixIjo06dPM68UAAAAAAC+miCjYFJrqNQiKrWKevHFF/O+NINi0qRJuf3T9EFHakN155135rZUG2200Wy/Tzo2zbmY3gorrJBv33jjjYZ9U6dOjfvuuy/f32mnnZo839ChQ5t1nQAAAAAAMDsEGQU0fVhRf5uCjFQNkaoo6vc99thjeTB4qohYZJFFZvs9llpqqSb3d+7cOd9++eWXDfvS+esfp5ClKTPbDwAAAABQNHW1tRW5lZUgo8BBxpgxY/JtCi0WWmih6N+/f8w777yx9tpr51ZTn3/++Ry1lUqqq/3TAwAAAABQfH7NLqDU9im1ikpDvd95550YP358fP/7328IH1JoMXny5LjnnnvmOMhojlTpUT9L45VXXmnymJntBwAAAACAr0OQUUApOEitoj744IM4+eST8xyM1FaqXn1o8de//jXPrkghw/QDuOemeeaZJ9ZZZ518/4orrmjymD/96U8t9v4AAAAAAHNTXU1tRW5lJcgoqPqw4uyzz8630wYZqcXUggsuGBdddFF88cUXudVUajnVkg444IB8e9ZZZ+W2VtM66aST4tFHH23R9wcAAAAAoJzmae0FMPMgI1VjpCHbaZD2sssu2/BcajGVWk3deOONDce2tC233DL22WefGDlyZK7+WH/99aNbt27x+OOPxzPPPBP7779/nHHGGS2+DirLsG3Wi3X6LJfvr9RriXy76zbrxwb9e+f7/xr/fFx8472tukZgzvh+Q9vl+w0AABSNIKOgUliQWkZNmjSpyaAi7fsmg4z66pB+/frlMOPBBx/M61t99dUbqkYEGUwv/QgydKt1G+/ru1ze6vkhBCqT7ze0Xb7fAABA0VTVpQEM0Eo69N21tZcAAAD8n8mPjWrtJQAAfCM+vvioqESdhx0XZWRGBgAAAAAAUFiCDAAAAAAAoLAEGQAAAAAAQGEZ9g0AAAAAQKnU1da29hJoBhUZAAAAAABAYQkyAAAAAACAwtJaCgAAAACAUqmr0VqqkqjIAAAAAAAACkuQAQAAAAAAFJYgAwAAAAAAKCwzMgAAAAAAKBUzMiqLigwAAAAAAKCwBBkAAAAAAEBhCTIAAAAAAIDCMiMDAAAAAIBSqa2pae0l0AwqMgAAAAAAgMISZAAAAAAAAIWltRQAAAAAAKVSV1vb2kugGVRkAAAAAAAAhSXIAAAAAAAACkuQAQAAAAAAFJYZGQAAAAAAlEpdjRkZlURFBgAAAAAAUFiCDAAAAAAAoLC0lgIAAAAAoFS0lqosKjIAAAAAAIDCEmQAAAAAAACFJcgAAAAAAAAKy4wMAAAAAABKpa7WjIxKoiIDAAAAAAAoLEEGAAAAAABQWIIMAAAAAACgsMzIAAAAAACgVGprzMioJCoyAAAAAACAwhJkAAAAAAAAhSXIAAAAAACgVOpqaityaykffPBB7LjjjtG5c+dYcMEFY7fddotPP/10lq8ZOHBgVFVVNdp+/vOfNzrmtddei8033zzmm2++WGyxxeKQQw6JqVOnNnt9ZmQAAAAAAECJ7bjjjjFhwoQYM2ZMTJkyJYYNGxZ77rlnXHnllbN83R577BHHHXdcw+MUWNSrqanJIUbXrl3j/vvvz+cfOnRotG/fPn73u981a32CDAAAAAAAKKlnnnkmRo8eHQ899FD0798/7zvrrLNiyJAhccopp0T37t1n+toUXKSgoim33XZbPP3003H77bfH4osvHn369Injjz8+fvWrX8UxxxwTHTp0mO01ai0FAAAAAAAVYNKkSfHxxx832tK+r+OBBx7I7aTqQ4xk4403jurq6hg7duwsX3vFFVdEly5dYqWVVooRI0bE559/3ui8K6+8cg4x6g0aNCiv+amnnmrWGlVkAAAAAABQKi05b6IlnXDCCXHsscc22nf00UfnCoc59dZbb+X5FdOaZ555YuGFF87PzcxPf/rT+M53vpMrNh5//PFcafHcc8/FDTfc0HDeaUOMpP7xrM7bFEEGAAAAAABUgBEjRsTw4cMb7evYsWOTxx522GFx4oknfmVbqTmVZmjUS5UX3bp1i4022ihefPHFWHbZZWNuEmQAAAAAAEAF6Nix40yDi+kddNBBscsuu8zymGWWWSbPuHjnnXca7Z86dWp88MEHM51/0ZQ111wz377wwgs5yEivHTduXKNj3n777XzbnPMmggwAAAAAAEqlrrYyW0s1x6KLLpq3rzJgwICYOHFiPPLII9GvX7+8784774za2tqGcGJ2jB8/Pt+myoz68/72t7/NIUl966oxY8ZE586dY8UVV2zWtRj2DQAAAAAAJbXCCivE4MGDY4899sgVFP/6179i3333jR122CHPv0jeeOONWH755RsqLFL7qOOPPz6HH6+88krccsstMXTo0Fh//fVjlVVWycdsuummObD42c9+Fv/+97/jH//4RxxxxBGxzz77zHZVST1BBgAAAAAAlNgVV1yRg4o042LIkCGx7rrrxvnnn9/w/JQpU/Ig788//zw/7tChQ9x+++05rEivS22stttuu/jLX/7S8Jp27drFX//6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OaiYmRTK7L777jHPPPPE5ptvnt+7PuCg3O4c+3S8NqFxYAi0Db7f0Hb5fkPb5fsNAFSqUraWSj/YX3fddTms+PGPf9ywPz1OlQjpB/y77rorampqol27dg3P1b+23tFHH53Dh/TD/VVXXZVDjmmrNHbYYYf46U9/mkOQBRdcsOG5U045JTbYYINYaKGFGq3rpptuyqHIXnvtFUOGDIl555234fg07Ptf//pXrLvuuvn+rPz+97+Pc889N5+n3p133pnXfvbZZ+fQIlWA1LvgggtytUavXr1yiLLKKqs0PHfPPffkoCWFL+m9l1tuuRne77LLLstrW2uttb7yswcAAAAAgOYoXUXGtGHEtFUXX3zxRdx///25emHLLbeMiRMnxsMPP9zw/PRBxgcffBCnnXZadOrUKf/4P22IUV9FkYKEDz/8MC6//PJGz6Vqh+lDjPr9KchILa9SkDKnUnuoaUOMJFWhDBo0KIcz0567trY2jjnmmHz/6quvbhRiJOuvv34ceeSRMXny5DjvvPOafL8UjAgxAAAAAABoCaUMMlLFRQoeUquoF198Me+79957Y9KkSbkV0/RBR2pDlSoaUrukjTbaKO9LYUAKP1LLpzQToyn18ytSQDK9N998M1dCHHTQQbkt0y677JK3p556Kj//3HPPzfH1pSCmKSussEK+feONNxr2PfbYY3ktqWVVv379mn0d9aENAAAAAEClqK2rq8itrErZWipJYUUKElJYkX7Erw8tUpCx8sor5wHZad+vf/3r/GN/qpLo27dvLLLIIvm4+oHfac7GV82DePfddxs9PvbYY+O3v/1tTJkyZaav+fjjj+f42tKMi6Z07tw533755ZcN++qvIwU6zb2OaYeRAwAAAABASyh9kDFmzJjchimFFqndUxrQnYZwp6Hbae7D559/3uR8jNSSKUlzJeoHcc/M8ssv33D/hhtuyK2cvvWtb+V5FanlU/fu3fM8jBQkHH744XHCCSfkKpA5ldY/u+qvo2vXrrn11Kx06dKlyf31szwAAAAAAGBuK22QkVpEpeAgtYh65513Yvz48bHNNts0hAAptEjPpWHXTQUZSy65ZL7t3bv3Vw7fnlYaDp6kiow999xzhueff/75+CbVX0eqNGnOdQAAAAAAwDehlDMy6n+479OnTx7affLJJ+cKiNRWql59aPHXv/417rvv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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 59
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:39:07.620357Z",
     "start_time": "2025-09-28T07:39:07.613949Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.DataFrame([[1, pd.NA, 2], [2, 3, 5], [pd.NA, 4, 6]])\n",
    "print(df)\n",
    "#       0     1  2\n",
    "# 0     1  <NA>  2\n",
    "# 1     2     3  5\n",
    "# 2  <NA>     4  6\n",
    "print(df.dropna())\n",
    "print(df.dropna(axis=1))\n",
    "df = pd.DataFrame([[1, pd.NA, 2], [pd.NA, pd.NA, 5], [pd.NA, pd.NA, pd.NA]])\n",
    "print(df)\n",
    "#       0     1     2\n",
    "# 0     1  <NA>     2\n",
    "# 1  <NA>  <NA>     5\n",
    "# 2  <NA>  <NA>  <NA>\n",
    "print(df.dropna(how=\"all\"))  # 如果所有值都是缺失值,则删除这一行\n",
    "#       0     1  2\n",
    "# 0     1  <NA>  2\n",
    "# 1  <NA>  <NA>  5\n",
    "print(df.dropna(thresh=2))  # 如果至少有2个值不是缺失值,则保留这一行\n",
    "#    0     1  2\n",
    "# 0  1  <NA>  2\n"
   ],
   "id": "7989bf04b77f2017",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      0     1  2\n",
      "0     1  <NA>  2\n",
      "1     2     3  5\n",
      "2  <NA>     4  6\n",
      "   0  1  2\n",
      "1  2  3  5\n",
      "   2\n",
      "0  2\n",
      "1  5\n",
      "2  6\n",
      "      0     1     2\n",
      "0     1  <NA>     2\n",
      "1  <NA>  <NA>     5\n",
      "2  <NA>  <NA>  <NA>\n",
      "      0     1  2\n",
      "0     1  <NA>  2\n",
      "1  <NA>  <NA>  5\n",
      "   0     1  2\n",
      "0  1  <NA>  2\n"
     ]
    }
   ],
   "execution_count": 64
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:40:31.944925Z",
     "start_time": "2025-09-28T07:40:31.921995Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/weather_withna.csv\")\n",
    "print(df.fillna(0).tail())\n",
    "print(df.fillna({\"temp_max\": 60, \"temp_min\": -60}).tail())  # 使用字典来\n",
    "print(df.fillna(df[[\"precipitation\", \"temp_max\", \"temp_min\", \"wind\"]].mean()).tail())  # 使用平均值填充\n",
    "print(df.ffill().tail())  # 使用前面的有效值填充\n",
    "#             date  precipitation  temp_max  temp_min  wind weather\n",
    "# 1456  2015-12-27            0.0      11.1       4.4   4.8     sun\n",
    "# 1457  2015-12-28            0.0      11.1       4.4   4.8     sun\n",
    "# 1458  2015-12-29            0.0      11.1       4.4   4.8     sun\n",
    "# 1459  2015-12-30            0.0      11.1       4.4   4.8     sun\n",
    "# 1460  2015-12-31           20.6      12.2       5.0   3.8    rain\n",
    "print(df.bfill().tail())  # 使用后面的有效值填充\n",
    "#             date  precipitation  temp_max  temp_min  wind weather\n",
    "# 1456  2015-12-27           20.6      12.2       5.0   3.8    rain\n",
    "# 1457  2015-12-28           20.6      12.2       5.0   3.8    rain\n",
    "# 1458  2015-12-29           20.6      12.2       5.0   3.8    rain\n",
    "# 1459  2015-12-30           20.6      12.2       5.0   3.8    rain\n",
    "# 1460  2015-12-31           20.6      12.2       5.0   3.8    rain\n"
   ],
   "id": "232bc6f32109dd76",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            date  precipitation  temp_max  temp_min  wind weather\n",
      "1456  2015-12-27            0.0       0.0       0.0   0.0       0\n",
      "1457  2015-12-28            0.0       0.0       0.0   0.0       0\n",
      "1458  2015-12-29            0.0       0.0       0.0   0.0       0\n",
      "1459  2015-12-30            0.0       0.0       0.0   0.0       0\n",
      "1460  2015-12-31           20.6      12.2       5.0   3.8    rain\n",
      "            date  precipitation  temp_max  temp_min  wind weather\n",
      "1456  2015-12-27            NaN      60.0     -60.0   NaN     NaN\n",
      "1457  2015-12-28            NaN      60.0     -60.0   NaN     NaN\n",
      "1458  2015-12-29            NaN      60.0     -60.0   NaN     NaN\n",
      "1459  2015-12-30            NaN      60.0     -60.0   NaN     NaN\n",
      "1460  2015-12-31           20.6      12.2       5.0   3.8    rain\n",
      "            date  precipitation   temp_max  temp_min      wind weather\n",
      "1456  2015-12-27       3.052332  15.851468  7.877202  3.242055     NaN\n",
      "1457  2015-12-28       3.052332  15.851468  7.877202  3.242055     NaN\n",
      "1458  2015-12-29       3.052332  15.851468  7.877202  3.242055     NaN\n",
      "1459  2015-12-30       3.052332  15.851468  7.877202  3.242055     NaN\n",
      "1460  2015-12-31      20.600000  12.200000  5.000000  3.800000    rain\n",
      "            date  precipitation  temp_max  temp_min  wind weather\n",
      "1456  2015-12-27            0.0      11.1       4.4   4.8     sun\n",
      "1457  2015-12-28            0.0      11.1       4.4   4.8     sun\n",
      "1458  2015-12-29            0.0      11.1       4.4   4.8     sun\n",
      "1459  2015-12-30            0.0      11.1       4.4   4.8     sun\n",
      "1460  2015-12-31           20.6      12.2       5.0   3.8    rain\n",
      "            date  precipitation  temp_max  temp_min  wind weather\n",
      "1456  2015-12-27           20.6      12.2       5.0   3.8    rain\n",
      "1457  2015-12-28           20.6      12.2       5.0   3.8    rain\n",
      "1458  2015-12-29           20.6      12.2       5.0   3.8    rain\n",
      "1459  2015-12-30           20.6      12.2       5.0   3.8    rain\n",
      "1460  2015-12-31           20.6      12.2       5.0   3.8    rain\n"
     ]
    }
   ],
   "execution_count": 69
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T07:41:20.397730Z",
     "start_time": "2025-09-28T07:41:20.391069Z"
    }
   },
   "cell_type": "code",
   "source": [
    "s = pd.Series([1, np.nan, 3, 4, np.nan, 6])\n",
    "# 使用默认的线性插值方法填充缺失值\n",
    "s_interpolated = s.interpolate()\n",
    "print(s_interpolated)\n",
    "\n",
    "# 0    1.0\n",
    "# 1    2.0\n",
    "# 2    3.0\n",
    "# 3    4.0\n",
    "# 4    5.0\n",
    "# 5    6.0\n",
    "# dtype: float64\n"
   ],
   "id": "9e8b265c98e8b05d",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    1.0\n",
      "1    2.0\n",
      "2    3.0\n",
      "3    4.0\n",
      "4    5.0\n",
      "5    6.0\n",
      "dtype: float64\n"
     ]
    }
   ],
   "execution_count": 71
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T09:16:56.855356Z",
     "start_time": "2025-09-28T09:16:56.841653Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def f(x):\n",
    "    return x * 10\n",
    "\n",
    "df = pd.DataFrame({\"a\": [1, 2, 3, 4, 5],  \"b\": [10, 20, 30, 40, 50]})\n",
    "print(df[\"a\"].apply(lambda x: x * 10))\n",
    "df = pd.DataFrame({\"a\": [10, 20, 30], \"b\": [40, 50, 60]})\n",
    "print(df.apply(f))\n",
    "\n",
    "def f(x):\n",
    "    return x[\"a\"] / x[\"b\"]\n",
    "\n",
    "df = pd.DataFrame({\"a\": [10, 20, 30], \"b\": [40, 50, 60]})\n",
    "print(df.apply(f, axis=1))\n",
    "# 0    0.25\n",
    "# 1    0.40\n",
    "# 2    0.50\n",
    "# dtype: float64\n",
    "\n",
    "def f(x, y):\n",
    "    if y == 0:\n",
    "        return np.nan\n",
    "    return x / y\n",
    "\n",
    "df = pd.DataFrame({\"a\": [10, 20, 30], \"b\": [40, 0, 60]})\n",
    "f_vec = np.vectorize(f)\n",
    "print(f_vec(df[\"a\"], df[\"b\"]))  # [0.25  nan 0.5 ]\n",
    "\n",
    "@np.vectorize\n",
    "def f(x, y):\n",
    "    if y == 0:\n",
    "        return np.nan\n",
    "    return x / y\n",
    "print(f(df[\"a\"], df[\"b\"]))"
   ],
   "id": "f8b9f6e409b88085",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    10\n",
      "1    20\n",
      "2    30\n",
      "3    40\n",
      "4    50\n",
      "Name: a, dtype: int64\n",
      "     a    b\n",
      "0  100  400\n",
      "1  200  500\n",
      "2  300  600\n",
      "0    0.25\n",
      "1    0.40\n",
      "2    0.50\n",
      "dtype: float64\n",
      "[0.25  nan 0.5 ]\n",
      "[0.25  nan 0.5 ]\n"
     ]
    }
   ],
   "execution_count": 78
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T09:23:51.772944Z",
     "start_time": "2025-09-28T09:23:51.740649Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/employees.csv\")  # 读取员工数据\n",
    "print(df.groupby(\"department_id\"))  # 按department_id分组，返回DataFrameGroupBy对象\n",
    "# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000024FCBAFD700>\n",
    "print(df.groupby(\"department_id\").groups)  # 查看分组结果\n",
    "# {10.0: [100], 20.0: [101, 102], 30.0: [14, 15, 16, 17, 18, 19]...\n",
    "print(df.groupby(\"department_id\").get_group(50))  # 获取分组为50的数据\n",
    "#     employee_id first_name    last_name     email...\n",
    "# 20          120    Matthew        Weiss    MWEISS...\n",
    "# 21          121       Adam        Fripp    AFRIPP...\n",
    "# 22          122      Payam     Kaufling  PKAUFLIN...\n",
    "for dept_id,group in df.groupby(\"department_id\"):\n",
    "    print(f\"当前组为{dept_id}，组里的数据情况{group.shape}:\")\n",
    "    print(group.iloc[:,0:3])\n",
    "    print(\"-------------------\")\n",
    "salary_mean = df.groupby([\"department_id\", \"job_id\"])[\n",
    "    [\"salary\", \"commission_pct\"]\n",
    "].mean()  # 按department_id和job_id分组\n",
    "print(salary_mean.index)  # 查看分组后的索引\n",
    "# MultiIndex([( 10.0,    'AD_ASST'),\n",
    "#             ( 20.0,     'MK_MAN'),\n",
    "#             ( 20.0,     'MK_REP'),\n",
    "#             ( 30.0,   'PU_CLERK'),\n",
    "#             ( 30.0,     'PU_MAN'),\n",
    "#             ...\n",
    "print(salary_mean.columns)  # 查看分组后的列\n",
    "# Index(['salary', 'commission_pct'], dtype='object')\n",
    "print(salary_mean.reset_index())\n"
   ],
   "id": "f130859d45908fc5",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<pandas.core.groupby.generic.DataFrameGroupBy object at 0x147bcbb90>\n",
      "{10.0: [100], 20.0: [101, 102], 30.0: [14, 15, 16, 17, 18, 19], 40.0: [103], 50.0: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 60.0: [3, 4, 5, 6, 7], 70.0: [104], 80.0: [45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79], 90.0: [0, 1, 2], 100.0: [8, 9, 10, 11, 12, 13], 110.0: [105, 106]}\n",
      "    employee_id first_name    last_name     email  phone_number    job_id  \\\n",
      "20          120    Matthew        Weiss    MWEISS  650.123.1234    ST_MAN   \n",
      "21          121       Adam        Fripp    AFRIPP  650.123.2234    ST_MAN   \n",
      "22          122      Payam     Kaufling  PKAUFLIN  650.123.3234    ST_MAN   \n",
      "23          123     Shanta      Vollman  SVOLLMAN  650.123.4234    ST_MAN   \n",
      "24          124      Kevin      Mourgos  KMOURGOS  650.123.5234    ST_MAN   \n",
      "25          125      Julia        Nayer    JNAYER  650.124.1214  ST_CLERK   \n",
      "26          126      Irene  Mikkilineni  IMIKKILI  650.124.1224  ST_CLERK   \n",
      "27          127      James       Landry   JLANDRY  650.124.1334  ST_CLERK   \n",
      "28          128     Steven       Markle   SMARKLE  650.124.1434  ST_CLERK   \n",
      "29          129      Laura       Bissot   LBISSOT  650.124.5234  ST_CLERK   \n",
      "30          130      Mozhe     Atkinson  MATKINSO  650.124.6234  ST_CLERK   \n",
      "31          131      James       Marlow   JAMRLOW  650.124.7234  ST_CLERK   \n",
      "32          132         TJ        Olson   TJOLSON  650.124.8234  ST_CLERK   \n",
      "33          133      Jason       Mallin   JMALLIN  650.127.1934  ST_CLERK   \n",
      "34          134    Michael       Rogers   MROGERS  650.127.1834  ST_CLERK   \n",
      "35          135         Ki          Gee      KGEE  650.127.1734  ST_CLERK   \n",
      "36          136      Hazel   Philtanker  HPHILTAN  650.127.1634  ST_CLERK   \n",
      "37          137     Renske       Ladwig   RLADWIG  650.121.1234  ST_CLERK   \n",
      "38          138    Stephen       Stiles   SSTILES  650.121.2034  ST_CLERK   \n",
      "39          139       John          Seo      JSEO  650.121.2019  ST_CLERK   \n",
      "40          140     Joshua        Patel    JPATEL  650.121.1834  ST_CLERK   \n",
      "41          141     Trenna         Rajs     TRAJS  650.121.8009  ST_CLERK   \n",
      "42          142     Curtis       Davies   CDAVIES  650.121.2994  ST_CLERK   \n",
      "43          143    Randall        Matos    RMATOS  650.121.2874  ST_CLERK   \n",
      "44          144      Peter       Vargas   PVARGAS  650.121.2004  ST_CLERK   \n",
      "80          180    Winston       Taylor   WTAYLOR  650.507.9876  SH_CLERK   \n",
      "81          181       Jean       Fleaur   JFLEAUR  650.507.9877  SH_CLERK   \n",
      "82          182     Martha     Sullivan  MSULLIVA  650.507.9878  SH_CLERK   \n",
      "83          183     Girard        Geoni    GGEONI  650.507.9879  SH_CLERK   \n",
      "84          184    Nandita     Sarchand  NSARCHAN  650.509.1876  SH_CLERK   \n",
      "85          185     Alexis         Bull     ABULL  650.509.2876  SH_CLERK   \n",
      "86          186      Julia    Dellinger  JDELLING  650.509.3876  SH_CLERK   \n",
      "87          187    Anthony       Cabrio   ACABRIO  650.509.4876  SH_CLERK   \n",
      "88          188      Kelly        Chung    KCHUNG  650.505.1876  SH_CLERK   \n",
      "89          189   Jennifer        Dilly    JDILLY  650.505.2876  SH_CLERK   \n",
      "90          190    Timothy        Gates    TGATES  650.505.3876  SH_CLERK   \n",
      "91          191    Randall      Perkins  RPERKINS  650.505.4876  SH_CLERK   \n",
      "92          192      Sarah         Bell     SBELL  650.501.1876  SH_CLERK   \n",
      "93          193    Britney      Everett  BEVERETT  650.501.2876  SH_CLERK   \n",
      "94          194     Samuel       McCain   SMCCAIN  650.501.3876  SH_CLERK   \n",
      "95          195      Vance        Jones    VJONES  650.501.4876  SH_CLERK   \n",
      "96          196      Alana        Walsh    AWALSH  650.507.9811  SH_CLERK   \n",
      "97          197      Kevin       Feeney   KFEENEY  650.507.9822  SH_CLERK   \n",
      "98          198     Donald     OConnell  DOCONNEL  650.507.9833  SH_CLERK   \n",
      "99          199    Douglas        Grant    DGRANT  650.507.9844  SH_CLERK   \n",
      "\n",
      "    salary  commission_pct  manager_id  department_id  \n",
      "20  8000.0             NaN       100.0           50.0  \n",
      "21  8200.0             NaN       100.0           50.0  \n",
      "22  7900.0             NaN       100.0           50.0  \n",
      "23  6500.0             NaN       100.0           50.0  \n",
      "24  5800.0             NaN       100.0           50.0  \n",
      "25  3200.0             NaN       120.0           50.0  \n",
      "26  2700.0             NaN       120.0           50.0  \n",
      "27  2400.0             NaN       120.0           50.0  \n",
      "28  2200.0             NaN       120.0           50.0  \n",
      "29  3300.0             NaN       121.0           50.0  \n",
      "30  2800.0             NaN       121.0           50.0  \n",
      "31  2500.0             NaN       121.0           50.0  \n",
      "32  2100.0             NaN       121.0           50.0  \n",
      "33  3300.0             NaN       122.0           50.0  \n",
      "34  2900.0             NaN       122.0           50.0  \n",
      "35  2400.0             NaN       122.0           50.0  \n",
      "36  2200.0             NaN       122.0           50.0  \n",
      "37  3600.0             NaN       123.0           50.0  \n",
      "38  3200.0             NaN       123.0           50.0  \n",
      "39  2700.0             NaN       123.0           50.0  \n",
      "40  2500.0             NaN       123.0           50.0  \n",
      "41  3500.0             NaN       124.0           50.0  \n",
      "42  3100.0             NaN       124.0           50.0  \n",
      "43  2600.0             NaN       124.0           50.0  \n",
      "44  2500.0             NaN       124.0           50.0  \n",
      "80  3200.0             NaN       120.0           50.0  \n",
      "81  3100.0             NaN       120.0           50.0  \n",
      "82  2500.0             NaN       120.0           50.0  \n",
      "83  2800.0             NaN       120.0           50.0  \n",
      "84  4200.0             NaN       121.0           50.0  \n",
      "85  4100.0             NaN       121.0           50.0  \n",
      "86  3400.0             NaN       121.0           50.0  \n",
      "87  3000.0             NaN       121.0           50.0  \n",
      "88  3800.0             NaN       122.0           50.0  \n",
      "89  3600.0             NaN       122.0           50.0  \n",
      "90  2900.0             NaN       122.0           50.0  \n",
      "91  2500.0             NaN       122.0           50.0  \n",
      "92  4000.0             NaN       123.0           50.0  \n",
      "93  3900.0             NaN       123.0           50.0  \n",
      "94  3200.0             NaN       123.0           50.0  \n",
      "95  2800.0             NaN       123.0           50.0  \n",
      "96  3100.0             NaN       124.0           50.0  \n",
      "97  3000.0             NaN       124.0           50.0  \n",
      "98  2600.0             NaN       124.0           50.0  \n",
      "99  2600.0             NaN       124.0           50.0  \n",
      "当前组为10.0，组里的数据情况(1, 10):\n",
      "     employee_id first_name last_name\n",
      "100          200   Jennifer    Whalen\n",
      "-------------------\n",
      "当前组为20.0，组里的数据情况(2, 10):\n",
      "     employee_id first_name  last_name\n",
      "101          201    Michael  Hartstein\n",
      "102          202        Pat        Fay\n",
      "-------------------\n",
      "当前组为30.0，组里的数据情况(6, 10):\n",
      "    employee_id first_name   last_name\n",
      "14          114        Den    Raphaely\n",
      "15          115  Alexander        Khoo\n",
      "16          116     Shelli       Baida\n",
      "17          117      Sigal      Tobias\n",
      "18          118        Guy      Himuro\n",
      "19          119      Karen  Colmenares\n",
      "-------------------\n",
      "当前组为40.0，组里的数据情况(1, 10):\n",
      "     employee_id first_name last_name\n",
      "103          203      Susan    Mavris\n",
      "-------------------\n",
      "当前组为50.0，组里的数据情况(45, 10):\n",
      "    employee_id first_name    last_name\n",
      "20          120    Matthew        Weiss\n",
      "21          121       Adam        Fripp\n",
      "22          122      Payam     Kaufling\n",
      "23          123     Shanta      Vollman\n",
      "24          124      Kevin      Mourgos\n",
      "25          125      Julia        Nayer\n",
      "26          126      Irene  Mikkilineni\n",
      "27          127      James       Landry\n",
      "28          128     Steven       Markle\n",
      "29          129      Laura       Bissot\n",
      "30          130      Mozhe     Atkinson\n",
      "31          131      James       Marlow\n",
      "32          132         TJ        Olson\n",
      "33          133      Jason       Mallin\n",
      "34          134    Michael       Rogers\n",
      "35          135         Ki          Gee\n",
      "36          136      Hazel   Philtanker\n",
      "37          137     Renske       Ladwig\n",
      "38          138    Stephen       Stiles\n",
      "39          139       John          Seo\n",
      "40          140     Joshua        Patel\n",
      "41          141     Trenna         Rajs\n",
      "42          142     Curtis       Davies\n",
      "43          143    Randall        Matos\n",
      "44          144      Peter       Vargas\n",
      "80          180    Winston       Taylor\n",
      "81          181       Jean       Fleaur\n",
      "82          182     Martha     Sullivan\n",
      "83          183     Girard        Geoni\n",
      "84          184    Nandita     Sarchand\n",
      "85          185     Alexis         Bull\n",
      "86          186      Julia    Dellinger\n",
      "87          187    Anthony       Cabrio\n",
      "88          188      Kelly        Chung\n",
      "89          189   Jennifer        Dilly\n",
      "90          190    Timothy        Gates\n",
      "91          191    Randall      Perkins\n",
      "92          192      Sarah         Bell\n",
      "93          193    Britney      Everett\n",
      "94          194     Samuel       McCain\n",
      "95          195      Vance        Jones\n",
      "96          196      Alana        Walsh\n",
      "97          197      Kevin       Feeney\n",
      "98          198     Donald     OConnell\n",
      "99          199    Douglas        Grant\n",
      "-------------------\n",
      "当前组为60.0，组里的数据情况(5, 10):\n",
      "   employee_id first_name  last_name\n",
      "3          103  Alexander     Hunold\n",
      "4          104      Bruce      Ernst\n",
      "5          105      David     Austin\n",
      "6          106      Valli  Pataballa\n",
      "7          107      Diana    Lorentz\n",
      "-------------------\n",
      "当前组为70.0，组里的数据情况(1, 10):\n",
      "     employee_id first_name last_name\n",
      "104          204    Hermann      Baer\n",
      "-------------------\n",
      "当前组为80.0，组里的数据情况(34, 10):\n",
      "    employee_id   first_name   last_name\n",
      "45          145         John     Russell\n",
      "46          146        Karen    Partners\n",
      "47          147      Alberto   Errazuriz\n",
      "48          148       Gerald   Cambrault\n",
      "49          149        Eleni     Zlotkey\n",
      "50          150        Peter      Tucker\n",
      "51          151        David   Bernstein\n",
      "52          152        Peter        Hall\n",
      "53          153  Christopher       Olsen\n",
      "54          154      Nanette   Cambrault\n",
      "55          155       Oliver     Tuvault\n",
      "56          156      Janette        King\n",
      "57          157      Patrick       Sully\n",
      "58          158        Allan      McEwen\n",
      "59          159      Lindsey       Smith\n",
      "60          160       Louise       Doran\n",
      "61          161       Sarath      Sewall\n",
      "62          162        Clara     Vishney\n",
      "63          163     Danielle      Greene\n",
      "64          164       Mattea     Marvins\n",
      "65          165        David         Lee\n",
      "66          166       Sundar        Ande\n",
      "67          167         Amit       Banda\n",
      "68          168         Lisa        Ozer\n",
      "69          169     Harrison       Bloom\n",
      "70          170       Tayler         Fox\n",
      "71          171      William       Smith\n",
      "72          172    Elizabeth       Bates\n",
      "73          173      Sundita       Kumar\n",
      "74          174        Ellen        Abel\n",
      "75          175       Alyssa      Hutton\n",
      "76          176     Jonathon      Taylor\n",
      "77          177         Jack  Livingston\n",
      "79          179      Charles     Johnson\n",
      "-------------------\n",
      "当前组为90.0，组里的数据情况(3, 10):\n",
      "   employee_id first_name last_name\n",
      "0          100     Steven      King\n",
      "1          101      N_ann   Kochhar\n",
      "2          102        Lex   De Haan\n",
      "-------------------\n",
      "当前组为100.0，组里的数据情况(6, 10):\n",
      "    employee_id   first_name  last_name\n",
      "8           108        Nancy  Greenberg\n",
      "9           109       Daniel     Faviet\n",
      "10          110         John       Chen\n",
      "11          111       Ismael    Sciarra\n",
      "12          112  Jose Manuel      Urman\n",
      "13          113         Luis       Popp\n",
      "-------------------\n",
      "当前组为110.0，组里的数据情况(2, 10):\n",
      "     employee_id first_name last_name\n",
      "105          205    Shelley   Higgins\n",
      "106          206    William     Gietz\n",
      "-------------------\n",
      "MultiIndex([( 10.0,    'AD_ASST'),\n",
      "            ( 20.0,     'MK_MAN'),\n",
      "            ( 20.0,     'MK_REP'),\n",
      "            ( 30.0,   'PU_CLERK'),\n",
      "            ( 30.0,     'PU_MAN'),\n",
      "            ( 40.0,     'HR_REP'),\n",
      "            ( 50.0,   'SH_CLERK'),\n",
      "            ( 50.0,   'ST_CLERK'),\n",
      "            ( 50.0,     'ST_MAN'),\n",
      "            ( 60.0,    'IT_PROG'),\n",
      "            ( 70.0,     'PR_REP'),\n",
      "            ( 80.0,     'SA_MAN'),\n",
      "            ( 80.0,     'SA_REP'),\n",
      "            ( 90.0,    'AD_PRES'),\n",
      "            ( 90.0,      'AD_VP'),\n",
      "            (100.0, 'FI_ACCOUNT'),\n",
      "            (100.0,     'FI_MGR'),\n",
      "            (110.0, 'AC_ACCOUNT'),\n",
      "            (110.0,     'AC_MGR')],\n",
      "           names=['department_id', 'job_id'])\n",
      "Index(['salary', 'commission_pct'], dtype='object')\n",
      "    department_id      job_id        salary  commission_pct\n",
      "0            10.0     AD_ASST   4400.000000             NaN\n",
      "1            20.0      MK_MAN  13000.000000             NaN\n",
      "2            20.0      MK_REP   6000.000000             NaN\n",
      "3            30.0    PU_CLERK   2780.000000             NaN\n",
      "4            30.0      PU_MAN  11000.000000             NaN\n",
      "5            40.0      HR_REP   6500.000000             NaN\n",
      "6            50.0    SH_CLERK   3215.000000             NaN\n",
      "7            50.0    ST_CLERK   2785.000000             NaN\n",
      "8            50.0      ST_MAN   7280.000000             NaN\n",
      "9            60.0     IT_PROG   5760.000000             NaN\n",
      "10           70.0      PR_REP  10000.000000             NaN\n",
      "11           80.0      SA_MAN  12200.000000        0.300000\n",
      "12           80.0      SA_REP   8396.551724        0.212069\n",
      "13           90.0     AD_PRES  24000.000000             NaN\n",
      "14           90.0       AD_VP  17000.000000             NaN\n",
      "15          100.0  FI_ACCOUNT   7920.000000             NaN\n",
      "16          100.0      FI_MGR  12000.000000             NaN\n",
      "17          110.0  AC_ACCOUNT   8300.000000             NaN\n",
      "18          110.0      AC_MGR  12000.000000             NaN\n"
     ]
    }
   ],
   "execution_count": 85
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T09:26:34.288785Z",
     "start_time": "2025-09-28T09:26:34.272308Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/employees.csv\")  # 加载员工数据\n",
    "\n",
    "salary = pd.cut(df.iloc[9:16][\"salary\"], 3)\n",
    "print(salary)\n",
    "\n",
    "salary = pd.cut(df.iloc[9:16][\"salary\"], [0, 10000, 20000])\n",
    "print(salary)\n",
    "# 9         (0, 10000]\n",
    "# 10        (0, 10000]\n",
    "# 11        (0, 10000]\n",
    "# 12        (0, 10000]\n",
    "# 13        (0, 10000]\n",
    "# 14    (10000, 20000]\n",
    "# 15        (0, 10000]\n",
    "# Name: salary, dtype: category\n",
    "# Categories (2, interval[int64, right]): [(0, 10000] < (10000, 20000]]\n",
    "\n",
    "salary = pd.cut(df.iloc[9:16][\"salary\"], 3, labels=[\"low\", \"medium\", \"high\"])\n",
    "print(salary)\n",
    "# 9       high\n",
    "# 10    medium\n",
    "# 11    medium\n",
    "# 12    medium\n",
    "# 13    medium\n",
    "# 14      high\n",
    "# 15       low\n",
    "# Name: salary, dtype: category\n",
    "# Categories (3, object): ['low' < 'medium' < 'high']\n"
   ],
   "id": "925d2ae4e5b9061f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9      (8366.667, 11000.0]\n",
      "10    (5733.333, 8366.667]\n",
      "11    (5733.333, 8366.667]\n",
      "12    (5733.333, 8366.667]\n",
      "13    (5733.333, 8366.667]\n",
      "14     (8366.667, 11000.0]\n",
      "15      (3092.1, 5733.333]\n",
      "Name: salary, dtype: category\n",
      "Categories (3, interval[float64, right]): [(3092.1, 5733.333] < (5733.333, 8366.667] < (8366.667, 11000.0]]\n",
      "9         (0, 10000]\n",
      "10        (0, 10000]\n",
      "11        (0, 10000]\n",
      "12        (0, 10000]\n",
      "13        (0, 10000]\n",
      "14    (10000, 20000]\n",
      "15        (0, 10000]\n",
      "Name: salary, dtype: category\n",
      "Categories (2, interval[int64, right]): [(0, 10000] < (10000, 20000]]\n",
      "9       high\n",
      "10    medium\n",
      "11    medium\n",
      "12    medium\n",
      "13    medium\n",
      "14      high\n",
      "15       low\n",
      "Name: salary, dtype: category\n",
      "Categories (3, object): ['low' < 'medium' < 'high']\n"
     ]
    }
   ],
   "execution_count": 88
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T09:30:19.981434Z",
     "start_time": "2025-09-28T09:30:19.961435Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/employees.csv\")  # 读取员工数据\n",
    "# 按department_id分组，计算salary的最小值，中位数，最大值\n",
    "print(df.groupby(\"department_id\")[\"salary\"].agg([\"min\", \"median\", \"max\"]))\n",
    "df = pd.read_csv(\"data/employees.csv\")  # 读取员工数据\n",
    "# 按department_id分组，统计job_id的种类数，commission_pct的平均值\n",
    "print(df.groupby(\"department_id\").agg({\"job_id\": \"nunique\", \"commission_pct\": \"mean\"}))\n",
    "print(\n",
    "    df.groupby(\"department_id\")\n",
    "    .agg(\n",
    "        {\"job_id\": \"nunique\", \"commission_pct\": \"mean\"},\n",
    "    )\n",
    "    .rename(\n",
    "        columns={\"job_id\": \"工种数\", \"commission_pct\": \"佣金比例平均值\"},\n",
    "    )\n",
    ")\n",
    "def f(x):\n",
    "    \"\"\"统计每个部门员工last_name的首字母\"\"\"\n",
    "    result = set()\n",
    "    for i in x:\n",
    "        result.add(i[0])\n",
    "    return result\n",
    "\n",
    "print(df.groupby(\"department_id\")[\"last_name\"].agg(f))\n"
   ],
   "id": "e3c6e8d0cc4aba2c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                   min   median      max\n",
      "department_id                           \n",
      "10.0            4400.0   4400.0   4400.0\n",
      "20.0            6000.0   9500.0  13000.0\n",
      "30.0            2500.0   2850.0  11000.0\n",
      "40.0            6500.0   6500.0   6500.0\n",
      "50.0            2100.0   3100.0   8200.0\n",
      "60.0            4200.0   4800.0   9000.0\n",
      "70.0           10000.0  10000.0  10000.0\n",
      "80.0            6100.0   8900.0  14000.0\n",
      "90.0           17000.0  17000.0  24000.0\n",
      "100.0           6900.0   8000.0  12000.0\n",
      "110.0           8300.0  10150.0  12000.0\n",
      "               job_id  commission_pct\n",
      "department_id                        \n",
      "10.0                1             NaN\n",
      "20.0                2             NaN\n",
      "30.0                2             NaN\n",
      "40.0                1             NaN\n",
      "50.0                3             NaN\n",
      "60.0                1             NaN\n",
      "70.0                1             NaN\n",
      "80.0                2           0.225\n",
      "90.0                2             NaN\n",
      "100.0               2             NaN\n",
      "110.0               2             NaN\n",
      "               工种数  佣金比例平均值\n",
      "department_id              \n",
      "10.0             1      NaN\n",
      "20.0             2      NaN\n",
      "30.0             2      NaN\n",
      "40.0             1      NaN\n",
      "50.0             3      NaN\n",
      "60.0             1      NaN\n",
      "70.0             1      NaN\n",
      "80.0             2    0.225\n",
      "90.0             2      NaN\n",
      "100.0            2      NaN\n",
      "110.0            2      NaN\n",
      "department_id\n",
      "10.0                                                   {W}\n",
      "20.0                                                {H, F}\n",
      "30.0                                    {T, B, K, R, H, C}\n",
      "40.0                                                   {M}\n",
      "50.0     {G, N, M, P, F, B, R, S, T, O, V, A, W, L, K, ...\n",
      "60.0                                       {L, E, H, A, P}\n",
      "70.0                                                   {B}\n",
      "80.0     {G, M, F, P, B, R, S, T, O, V, Z, A, L, K, E, ...\n",
      "90.0                                                {D, K}\n",
      "100.0                                   {G, U, S, P, C, F}\n",
      "110.0                                               {G, H}\n",
      "Name: last_name, dtype: object\n"
     ]
    }
   ],
   "execution_count": 93
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T09:51:26.562378Z",
     "start_time": "2025-09-28T09:51:26.537981Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/employees.csv\")  # 读取员工数据\n",
    "print(df.groupby(\"department_id\")[\"salary\"].transform(lambda x: x - x.mean()))\n",
    "df = pd.read_csv(\"data/employees.csv\")  # 读取员工数据\n",
    "na_index = pd.Series(df.index.tolist()).sample(30)  # 随机挑选30条数据\n",
    "df.loc[na_index, \"salary\"] = pd.NA  # 将这30条数据的salary设置为缺失值\n",
    "print(df.groupby(\"department_id\")[\"salary\"].agg([\"size\", \"count\"]))  # 查看每组数据总数与非空数据数\n",
    "\n",
    "def fill_missing(x):\n",
    "    # 使用平均值填充，如果平均值也为NaN，用0填充\n",
    "    if np.isnan(x.mean()):\n",
    "        return 0\n",
    "    return x.fillna(x.mean())\n",
    "\n",
    "df[\"salary\"] = df.groupby(\"department_id\")[\"salary\"].transform(fill_missing)\n",
    "print(df.groupby(\"department_id\")[\"salary\"].agg([\"size\", \"count\"]))  # 查看每组数据总数与非空数据数\n",
    "commission_pct_filter = df.groupby(\"department_id\").filter(\n",
    "    lambda x: x[\"commission_pct\"].notnull().all()\n",
    ")  # 按department_id分组，过滤掉commission_pct包含空值的分组\n",
    "print(commission_pct_filter)\n"
   ],
   "id": "28de8005fd5c68e2",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0      4666.666667\n",
      "1     -2333.333333\n",
      "2     -2333.333333\n",
      "3      3240.000000\n",
      "4       240.000000\n",
      "          ...     \n",
      "102   -3500.000000\n",
      "103       0.000000\n",
      "104       0.000000\n",
      "105    1850.000000\n",
      "106   -1850.000000\n",
      "Name: salary, Length: 107, dtype: float64\n",
      "               size  count\n",
      "department_id             \n",
      "10.0              1      1\n",
      "20.0              2      2\n",
      "30.0              6      5\n",
      "40.0              1      1\n",
      "50.0             45     34\n",
      "60.0              5      4\n",
      "70.0              1      1\n",
      "80.0             34     20\n",
      "90.0              3      2\n",
      "100.0             6      5\n",
      "110.0             2      2\n",
      "               size  count\n",
      "department_id             \n",
      "10.0              1      1\n",
      "20.0              2      2\n",
      "30.0              6      6\n",
      "40.0              1      1\n",
      "50.0             45     45\n",
      "60.0              5      5\n",
      "70.0              1      1\n",
      "80.0             34     34\n",
      "90.0              3      3\n",
      "100.0             6      6\n",
      "110.0             2      2\n",
      "    employee_id   first_name   last_name     email        phone_number  \\\n",
      "45          145         John     Russell   JRUSSEL  011.44.1344.429268   \n",
      "46          146        Karen    Partners  KPARTNER  011.44.1344.467268   \n",
      "47          147      Alberto   Errazuriz  AERRAZUR  011.44.1344.429278   \n",
      "48          148       Gerald   Cambrault  GCAMBRAU  011.44.1344.619268   \n",
      "49          149        Eleni     Zlotkey  EZLOTKEY  011.44.1344.429018   \n",
      "50          150        Peter      Tucker   PTUCKER  011.44.1344.129268   \n",
      "51          151        David   Bernstein  DBERNSTE  011.44.1344.345268   \n",
      "52          152        Peter        Hall     PHALL  011.44.1344.478968   \n",
      "53          153  Christopher       Olsen    COLSEN  011.44.1344.498718   \n",
      "54          154      Nanette   Cambrault  NCAMBRAU  011.44.1344.987668   \n",
      "55          155       Oliver     Tuvault  OTUVAULT  011.44.1344.486508   \n",
      "56          156      Janette        King     JKING  011.44.1345.429268   \n",
      "57          157      Patrick       Sully    PSULLY  011.44.1345.929268   \n",
      "58          158        Allan      McEwen   AMCEWEN  011.44.1345.829268   \n",
      "59          159      Lindsey       Smith    LSMITH  011.44.1345.729268   \n",
      "60          160       Louise       Doran    LDORAN  011.44.1345.629268   \n",
      "61          161       Sarath      Sewall   SSEWALL  011.44.1345.529268   \n",
      "62          162        Clara     Vishney  CVISHNEY  011.44.1346.129268   \n",
      "63          163     Danielle      Greene   DGREENE  011.44.1346.229268   \n",
      "64          164       Mattea     Marvins  MMARVINS  011.44.1346.329268   \n",
      "65          165        David         Lee      DLEE  011.44.1346.529268   \n",
      "66          166       Sundar        Ande     SANDE  011.44.1346.629268   \n",
      "67          167         Amit       Banda    ABANDA  011.44.1346.729268   \n",
      "68          168         Lisa        Ozer     LOZER  011.44.1343.929268   \n",
      "69          169     Harrison       Bloom    HBLOOM  011.44.1343.829268   \n",
      "70          170       Tayler         Fox      TFOX  011.44.1343.729268   \n",
      "71          171      William       Smith    WSMITH  011.44.1343.629268   \n",
      "72          172    Elizabeth       Bates    EBATES  011.44.1343.529268   \n",
      "73          173      Sundita       Kumar    SKUMAR  011.44.1343.329268   \n",
      "74          174        Ellen        Abel     EABEL  011.44.1644.429267   \n",
      "75          175       Alyssa      Hutton   AHUTTON  011.44.1644.429266   \n",
      "76          176     Jonathon      Taylor   JTAYLOR  011.44.1644.429265   \n",
      "77          177         Jack  Livingston  JLIVINGS  011.44.1644.429264   \n",
      "79          179      Charles     Johnson  CJOHNSON  011.44.1644.429262   \n",
      "\n",
      "    job_id   salary  commission_pct  manager_id  department_id  \n",
      "45  SA_MAN   8960.0            0.40       100.0           80.0  \n",
      "46  SA_MAN  13500.0            0.30       100.0           80.0  \n",
      "47  SA_MAN  12000.0            0.30       100.0           80.0  \n",
      "48  SA_MAN  11000.0            0.30       100.0           80.0  \n",
      "49  SA_MAN  10500.0            0.20       100.0           80.0  \n",
      "50  SA_REP  10000.0            0.30       145.0           80.0  \n",
      "51  SA_REP   9500.0            0.25       145.0           80.0  \n",
      "52  SA_REP   8960.0            0.25       145.0           80.0  \n",
      "53  SA_REP   8000.0            0.20       145.0           80.0  \n",
      "54  SA_REP   7500.0            0.20       145.0           80.0  \n",
      "55  SA_REP   7000.0            0.15       145.0           80.0  \n",
      "56  SA_REP  10000.0            0.35       146.0           80.0  \n",
      "57  SA_REP   8960.0            0.35       146.0           80.0  \n",
      "58  SA_REP   8960.0            0.35       146.0           80.0  \n",
      "59  SA_REP   8960.0            0.30       146.0           80.0  \n",
      "60  SA_REP   7500.0            0.30       146.0           80.0  \n",
      "61  SA_REP   8960.0            0.25       146.0           80.0  \n",
      "62  SA_REP  10500.0            0.25       147.0           80.0  \n",
      "63  SA_REP   8960.0            0.15       147.0           80.0  \n",
      "64  SA_REP   7200.0            0.10       147.0           80.0  \n",
      "65  SA_REP   8960.0            0.10       147.0           80.0  \n",
      "66  SA_REP   6400.0            0.10       147.0           80.0  \n",
      "67  SA_REP   8960.0            0.10       147.0           80.0  \n",
      "68  SA_REP   8960.0            0.25       148.0           80.0  \n",
      "69  SA_REP   8960.0            0.20       148.0           80.0  \n",
      "70  SA_REP   9600.0            0.20       148.0           80.0  \n",
      "71  SA_REP   8960.0            0.15       148.0           80.0  \n",
      "72  SA_REP   7300.0            0.15       148.0           80.0  \n",
      "73  SA_REP   6100.0            0.10       148.0           80.0  \n",
      "74  SA_REP  11000.0            0.30       149.0           80.0  \n",
      "75  SA_REP   8960.0            0.25       149.0           80.0  \n",
      "76  SA_REP   8960.0            0.20       149.0           80.0  \n",
      "77  SA_REP   8400.0            0.20       149.0           80.0  \n",
      "79  SA_REP   6200.0            0.10       149.0           80.0  \n"
     ]
    }
   ],
   "execution_count": 97
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T11:45:49.793431Z",
     "start_time": "2025-09-28T11:45:49.755209Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/sleep.csv\")\n",
    "sleep_duration_stage = pd.cut(df[\"sleep_duration\"], [0, 5, 6, 7, 8, 9, 10, 11, 12])  # 对睡眠时间进行划分\n",
    "print(sleep_duration_stage)\n",
    "stress_level_stage = pd.cut(df[\"stress_level\"], 4)  # 对压力等级进行划分\n",
    "print(stress_level_stage)\n",
    "print(df.pivot_table(values=\"sleep_quality\", index=[sleep_duration_stage, stress_level_stage], aggfunc=\"mean\"))\n",
    "print(\n",
    "    df.pivot_table(\n",
    "        values=\"sleep_quality\", index=[sleep_duration_stage, stress_level_stage], columns=[\"occupation\"], aggfunc=\"mean\"\n",
    "    )\n",
    ")\n",
    "print(\n",
    "    df.pivot_table(\n",
    "        values=\"sleep_quality\",\n",
    "        index=[sleep_duration_stage, stress_level_stage],\n",
    "        columns=[\"occupation\", \"gender\"],\n",
    "        aggfunc=\"mean\",\n",
    "    )\n",
    ")\n",
    "\n"
   ],
   "id": "7794f48115095cfc",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0        (7, 8]\n",
      "1        (0, 5]\n",
      "2        (6, 7]\n",
      "3        (8, 9]\n",
      "4       (9, 10]\n",
      "         ...   \n",
      "395      (0, 5]\n",
      "396      (5, 6]\n",
      "397      (5, 6]\n",
      "398    (10, 11]\n",
      "399      (5, 6]\n",
      "Name: sleep_duration, Length: 400, dtype: category\n",
      "Categories (8, interval[int64, right]): [(0, 5] < (5, 6] < (6, 7] < (7, 8] < (8, 9] < (9, 10] < (10, 11] < (11, 12]]\n",
      "0       (5.5, 7.75]\n",
      "1       (3.25, 5.5]\n",
      "2       (3.25, 5.5]\n",
      "3      (7.75, 10.0]\n",
      "4       (3.25, 5.5]\n",
      "           ...     \n",
      "395     (5.5, 7.75]\n",
      "396    (7.75, 10.0]\n",
      "397    (7.75, 10.0]\n",
      "398    (7.75, 10.0]\n",
      "399     (5.5, 7.75]\n",
      "Name: stress_level, Length: 400, dtype: category\n",
      "Categories (4, interval[float64, right]): [(0.991, 3.25] < (3.25, 5.5] < (5.5, 7.75] < (7.75, 10.0]]\n",
      "                              sleep_quality\n",
      "sleep_duration stress_level                \n",
      "(0, 5]         (0.991, 3.25]       6.781818\n",
      "               (3.25, 5.5]         6.161538\n",
      "               (5.5, 7.75]         5.677778\n",
      "               (7.75, 10.0]        6.082353\n",
      "(5, 6]         (0.991, 3.25]       5.876923\n",
      "               (3.25, 5.5]         6.777778\n",
      "               (5.5, 7.75]         6.058333\n",
      "               (7.75, 10.0]        6.438462\n",
      "(6, 7]         (0.991, 3.25]       6.472727\n",
      "               (3.25, 5.5]         5.841667\n",
      "               (5.5, 7.75]         5.377778\n",
      "               (7.75, 10.0]        5.545455\n",
      "(7, 8]         (0.991, 3.25]       6.314286\n",
      "               (3.25, 5.5]         5.375000\n",
      "               (5.5, 7.75]         7.280000\n",
      "               (7.75, 10.0]        5.700000\n",
      "(8, 9]         (0.991, 3.25]       5.423077\n",
      "               (3.25, 5.5]         6.640000\n",
      "               (5.5, 7.75]         5.877778\n",
      "               (7.75, 10.0]        6.320000\n",
      "(9, 10]        (0.991, 3.25]       5.788235\n",
      "               (3.25, 5.5]         6.790000\n",
      "               (5.5, 7.75]         6.010000\n",
      "               (7.75, 10.0]        6.287500\n",
      "(10, 11]       (0.991, 3.25]       5.853333\n",
      "               (3.25, 5.5]         6.057143\n",
      "               (5.5, 7.75]         6.000000\n",
      "               (7.75, 10.0]        6.083333\n",
      "(11, 12]       (0.991, 3.25]       6.335294\n",
      "               (3.25, 5.5]         6.700000\n",
      "               (5.5, 7.75]         6.071429\n",
      "               (7.75, 10.0]        6.370588\n",
      "occupation                    Manual Labor  Office Worker   Retired   Student\n",
      "sleep_duration stress_level                                                  \n",
      "(0, 5]         (0.991, 3.25]      6.900000       6.350000  6.720000  6.750000\n",
      "               (3.25, 5.5]        3.300000       7.966667  6.060000  5.650000\n",
      "               (5.5, 7.75]        4.833333       6.900000  3.200000  6.533333\n",
      "               (7.75, 10.0]       7.200000       5.977778  5.225000  7.150000\n",
      "(5, 6]         (0.991, 3.25]      5.220000       6.433333  5.700000  6.533333\n",
      "               (3.25, 5.5]        5.000000       7.050000  6.900000  9.000000\n",
      "               (5.5, 7.75]        6.050000       5.300000  5.300000  7.200000\n",
      "               (7.75, 10.0]       6.475000       4.050000       NaN  7.100000\n",
      "(6, 7]         (0.991, 3.25]      7.900000            NaN  5.866667  7.025000\n",
      "               (3.25, 5.5]        4.900000       4.250000  7.600000  5.650000\n",
      "               (5.5, 7.75]             NaN       5.466667  7.150000  4.425000\n",
      "               (7.75, 10.0]       5.600000       6.000000  6.600000  4.720000\n",
      "(7, 8]         (0.991, 3.25]      5.600000       7.700000  6.571429  5.100000\n",
      "               (3.25, 5.5]        3.400000       5.033333  6.400000  6.033333\n",
      "               (5.5, 7.75]        5.500000       6.600000       NaN  9.400000\n",
      "               (7.75, 10.0]       5.100000       5.750000  6.071429  5.475000\n",
      "(8, 9]         (0.991, 3.25]      5.100000            NaN  4.800000  5.742857\n",
      "               (3.25, 5.5]        6.000000       8.100000  4.000000       NaN\n",
      "               (5.5, 7.75]        4.600000            NaN  6.225000  5.850000\n",
      "               (7.75, 10.0]       6.100000       5.466667  6.566667  7.240000\n",
      "(9, 10]        (0.991, 3.25]      8.125000       5.200000  4.250000  5.550000\n",
      "               (3.25, 5.5]        6.600000       7.500000  7.300000  5.933333\n",
      "               (5.5, 7.75]        6.150000       5.466667  4.733333  8.600000\n",
      "               (7.75, 10.0]       5.760000       5.540000  8.000000  6.050000\n",
      "(10, 11]       (0.991, 3.25]      5.633333       5.725000  4.700000  7.300000\n",
      "               (3.25, 5.5]        6.466667       5.780000  5.880000  7.100000\n",
      "               (5.5, 7.75]        3.700000       6.825000  6.600000  5.900000\n",
      "               (7.75, 10.0]       6.585714       6.180000  6.900000  4.675000\n",
      "(11, 12]       (0.991, 3.25]      4.850000       6.171429  5.850000  7.183333\n",
      "               (3.25, 5.5]        7.500000       5.600000       NaN  8.100000\n",
      "               (5.5, 7.75]        5.825000       4.100000  7.550000       NaN\n",
      "               (7.75, 10.0]       6.357143       6.740000  4.866667  7.750000\n",
      "occupation                   Manual Labor           Office Worker         \\\n",
      "gender                             Female      Male        Female   Male   \n",
      "sleep_duration stress_level                                                \n",
      "(0, 5]         (0.991, 3.25]         6.75  7.300000      6.700000  6.000   \n",
      "               (3.25, 5.5]           3.30       NaN      7.100000  9.700   \n",
      "               (5.5, 7.75]           4.55  5.400000      5.900000  7.900   \n",
      "               (7.75, 10.0]          8.40  6.000000      5.180000  6.975   \n",
      "(5, 6]         (0.991, 3.25]         5.50  4.800000      8.200000  5.550   \n",
      "               (3.25, 5.5]           5.00       NaN      6.600000  7.500   \n",
      "               (5.5, 7.75]           6.60  5.500000      4.900000  6.100   \n",
      "               (7.75, 10.0]          6.15  6.800000           NaN  4.050   \n",
      "(6, 7]         (0.991, 3.25]         7.90       NaN           NaN    NaN   \n",
      "               (3.25, 5.5]            NaN  4.900000           NaN  4.250   \n",
      "               (5.5, 7.75]            NaN       NaN      6.000000  4.400   \n",
      "               (7.75, 10.0]          5.60       NaN      6.600000  5.400   \n",
      "(7, 8]         (0.991, 3.25]         4.40  8.000000           NaN  7.700   \n",
      "               (3.25, 5.5]            NaN  3.400000      5.800000  4.650   \n",
      "               (5.5, 7.75]            NaN  5.500000           NaN  6.600   \n",
      "               (7.75, 10.0]          3.80  5.750000           NaN  5.750   \n",
      "(8, 9]         (0.991, 3.25]         5.10       NaN           NaN    NaN   \n",
      "               (3.25, 5.5]           6.60  5.850000      8.650000  7.550   \n",
      "               (5.5, 7.75]            NaN  4.600000           NaN    NaN   \n",
      "               (7.75, 10.0]           NaN  6.100000      4.433333  6.500   \n",
      "(9, 10]        (0.991, 3.25]         8.00  8.250000      4.000000  5.800   \n",
      "               (3.25, 5.5]           6.60       NaN      7.500000    NaN   \n",
      "               (5.5, 7.75]           6.15       NaN      5.750000  4.900   \n",
      "               (7.75, 10.0]          5.76       NaN      5.900000  5.450   \n",
      "(10, 11]       (0.991, 3.25]         5.85  5.200000      3.750000  7.700   \n",
      "               (3.25, 5.5]           6.85  5.700000      5.275000  7.800   \n",
      "               (5.5, 7.75]           2.80  4.600000      6.825000    NaN   \n",
      "               (7.75, 10.0]          5.55  7.966667      6.633333  5.500   \n",
      "(11, 12]       (0.991, 3.25]         4.85       NaN      4.100000  7.725   \n",
      "               (3.25, 5.5]            NaN  7.500000      5.600000    NaN   \n",
      "               (5.5, 7.75]           3.95  7.700000           NaN  4.100   \n",
      "               (7.75, 10.0]          6.00  6.625000      6.066667  7.750   \n",
      "\n",
      "occupation                     Retired              Student            \n",
      "gender                          Female       Male    Female      Male  \n",
      "sleep_duration stress_level                                            \n",
      "(0, 5]         (0.991, 3.25]       NaN   6.720000  6.100000  7.400000  \n",
      "               (3.25, 5.5]    4.850000   6.866667  5.300000  6.700000  \n",
      "               (5.5, 7.75]         NaN   3.200000  6.850000  5.900000  \n",
      "               (7.75, 10.0]   6.600000   4.766667  7.150000       NaN  \n",
      "(5, 6]         (0.991, 3.25]  5.700000        NaN  8.150000  3.300000  \n",
      "               (3.25, 5.5]    6.700000   7.100000  9.000000       NaN  \n",
      "               (5.5, 7.75]    4.450000   7.000000  7.066667  7.600000  \n",
      "               (7.75, 10.0]        NaN        NaN  7.266667  6.975000  \n",
      "(6, 7]         (0.991, 3.25]  6.700000   4.200000  6.566667  8.400000  \n",
      "               (3.25, 5.5]         NaN   7.600000  6.900000  5.400000  \n",
      "               (5.5, 7.75]    7.150000        NaN  5.150000  3.700000  \n",
      "               (7.75, 10.0]   4.900000  10.000000  4.720000       NaN  \n",
      "(7, 8]         (0.991, 3.25]  8.500000   5.800000  5.700000  4.500000  \n",
      "               (3.25, 5.5]    6.400000        NaN       NaN  6.033333  \n",
      "               (5.5, 7.75]         NaN        NaN       NaN  9.400000  \n",
      "               (7.75, 10.0]        NaN   6.071429  4.300000  9.000000  \n",
      "(8, 9]         (0.991, 3.25]       NaN   4.800000  6.333333  5.300000  \n",
      "               (3.25, 5.5]    4.000000        NaN       NaN       NaN  \n",
      "               (5.5, 7.75]    5.150000   7.300000  5.450000  6.250000  \n",
      "               (7.75, 10.0]   7.000000   6.350000  2.000000  8.550000  \n",
      "(9, 10]        (0.991, 3.25]  3.700000   4.800000  6.400000  5.380000  \n",
      "               (3.25, 5.5]    7.100000   7.400000       NaN  5.933333  \n",
      "               (5.5, 7.75]    2.800000   5.700000  8.600000       NaN  \n",
      "               (7.75, 10.0]   7.333333  10.000000       NaN  6.050000  \n",
      "(10, 11]       (0.991, 3.25]  4.700000   4.700000  6.933333  8.400000  \n",
      "               (3.25, 5.5]    4.200000   7.000000       NaN  7.100000  \n",
      "               (5.5, 7.75]    8.100000   5.850000  7.800000  4.633333  \n",
      "               (7.75, 10.0]   9.100000   4.700000  4.300000  5.050000  \n",
      "(11, 12]       (0.991, 3.25]       NaN   5.850000  6.566667  7.800000  \n",
      "               (3.25, 5.5]         NaN        NaN       NaN  8.100000  \n",
      "               (5.5, 7.75]    7.550000        NaN       NaN       NaN  \n",
      "               (7.75, 10.0]   5.200000   4.200000  9.200000  6.300000  \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/15/vk5p0l_j2yv0wq7ttpcp_xgh0000gn/T/ipykernel_78267/2602005328.py:6: FutureWarning: The default value of observed=False is deprecated and will change to observed=True in a future version of pandas. Specify observed=False to silence this warning and retain the current behavior\n",
      "  print(df.pivot_table(values=\"sleep_quality\", index=[sleep_duration_stage, stress_level_stage], aggfunc=\"mean\"))\n",
      "/var/folders/15/vk5p0l_j2yv0wq7ttpcp_xgh0000gn/T/ipykernel_78267/2602005328.py:8: FutureWarning: The default value of observed=False is deprecated and will change to observed=True in a future version of pandas. Specify observed=False to silence this warning and retain the current behavior\n",
      "  df.pivot_table(\n",
      "/var/folders/15/vk5p0l_j2yv0wq7ttpcp_xgh0000gn/T/ipykernel_78267/2602005328.py:13: FutureWarning: The default value of observed=False is deprecated and will change to observed=True in a future version of pandas. Specify observed=False to silence this warning and retain the current behavior\n",
      "  df.pivot_table(\n"
     ]
    }
   ],
   "execution_count": 102
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T11:57:39.242552Z",
     "start_time": "2025-09-28T11:57:39.200025Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(pd.to_datetime(\"2015-01-01\"))\n",
    "# 2015-01-01 00:00:00\n",
    "print(pd.to_datetime([\"4th of July, 2015\", \"2015-Jul-6\", \"07-07-2015\", \"20150708\"], format=\"mixed\"))\n",
    "# DatetimeIndex(['2015-07-04', '2015-07-06', '2015-07-07', '2015-07-08'], dtype='datetime64[ns]', freq=None)\n",
    "df = pd.read_csv(\"data/weather.csv\")\n",
    "print(df[\"date\"].tail())\n",
    "# 1456    2015-12-27\n",
    "# 1457    2015-12-28\n",
    "# 1458    2015-12-29\n",
    "# 1459    2015-12-30\n",
    "# 1460    2015-12-31\n",
    "# Name: date, dtype: object\n",
    "print(pd.to_datetime(df[\"date\"]).tail())\n",
    "# 1456   2015-12-27\n",
    "# 1457   2015-12-28\n",
    "# 1458   2015-12-29\n",
    "# 1459   2015-12-30\n",
    "# 1460   2015-12-31\n",
    "# Name: date, dtype: datetime64[ns]\n",
    "df = pd.read_csv(\"data/weather.csv\", parse_dates=[0])\n",
    "print(df[\"date\"].tail())\n",
    "# 1456   2015-12-27\n",
    "# 1457   2015-12-28\n",
    "# 1458   2015-12-29\n",
    "# 1459   2015-12-30\n",
    "# 1460   2015-12-31\n",
    "# Name: date, dtype: datetime64[ns]\n",
    "d = pd.Timestamp(\"2015-01-01 09:08:07.123456\")\n",
    "print(d.year)  # 2015\n",
    "print(d.month)  # 1\n",
    "print(d.day)  # 1\n",
    "print(d.hour)  # 9\n",
    "print(d.minute)  # 8\n",
    "print(d.second)  # 7\n",
    "print(d.microsecond)  # 123456\n",
    "\n",
    "df = pd.read_csv(\"data/weather.csv\", parse_dates=[0])\n",
    "df_date = pd.to_datetime(df[\"date\"])\n",
    "df[\"year\"] = df_date.dt.year\n",
    "df[\"month\"] = df_date.dt.month\n",
    "df[\"day\"] = df_date.dt.day\n",
    "print(df[[\"date\", \"year\", \"month\", \"day\"]].tail())\n",
    "#            date  year  month  day\n",
    "# 1456 2015-12-27  2015     12   27\n",
    "# 1457 2015-12-28  2015     12   28\n",
    "# 1458 2015-12-29  2015     12   29\n",
    "# 1459 2015-12-30  2015     12   30\n",
    "# 1460 2015-12-31  2015     12   31\n",
    "df = pd.read_csv(\"data/weather.csv\")\n",
    "df[\"quarter\"] = pd.to_datetime(df[\"date\"]).dt.to_period(\"Q\")  # 将 年-月-日 转换为 年季度\n",
    "print(df[[\"date\", \"quarter\"]].head())\n",
    "df = pd.read_csv(\"data/weather.csv\", parse_dates=[0])\n",
    "df_date = pd.to_datetime(df[\"date\"])\n",
    "timedelta = df_date - df_date[0]\n",
    "print(timedelta.head())\n",
    "# 0   0 days\n",
    "# 1   1 days\n",
    "# 2   2 days\n",
    "# 3   3 days\n",
    "# 4   4 days\n",
    "# Name: date, dtype: timedelta64[ns]\n",
    "df = pd.read_csv(\"data/weather.csv\")\n",
    "df[\"date\"] = pd.to_datetime(df[\"date\"])  # 将date列转换为datetime64类型\n",
    "df.set_index(\"date\", inplace=True)  # 将date列设置为索引\n",
    "df.info()\n",
    "# <class 'pandas.core.frame.DataFrame'>\n",
    "# DatetimeIndex: 1461 entries, 2012-01-01 to 2015-12-31将时间作为索引后可以直接使用时间进行切片取值。\n",
    "print(df.loc[\"2013-01\":\"2013-06\"])  # 获取2013年1~6月的数据\n",
    "#             precipitation  temp_max  temp_min  wind weather\n",
    "# date\n",
    "# 2013-01-01            0.0       5.0      -2.8   2.7     sun\n",
    "# 2013-01-02            0.0       6.1      -1.1   3.2     sun\n",
    "# ...                   ...       ...       ...   ...     ...\n",
    "# 2013-06-29            0.0      30.0      18.3   1.7     sun\n",
    "# 2013-06-30            0.0      33.9      17.2   2.5     sun\n",
    "print(df.loc[\"2015\"])  # 获取2015年所有数据\n",
    "#             precipitation  temp_max  temp_min  wind weather\n",
    "# date\n",
    "# 2015-01-01            0.0       5.6      -3.2   1.2     sun\n",
    "# 2015-01-02            1.5       5.6       0.0   2.3    rain\n",
    "# ...                   ...       ...       ...   ...     ...\n",
    "# 2015-12-30            0.0       5.6      -1.0   3.4     sun\n",
    "# 2015-12-31            0.0       5.6      -2.1   3.5     sun\n",
    "df.between_time(\"9:00\", \"11:00\")  # 获取9:00到11:00之间的数据\n",
    "df.at_time(\"3:33\")  # 获取3:33的数据\n"
   ],
   "id": "bf889fc10fe29a71",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2015-01-01 00:00:00\n",
      "DatetimeIndex(['2015-07-04', '2015-07-06', '2015-07-07', '2015-07-08'], dtype='datetime64[ns]', freq=None)\n",
      "1456    2015-12-27\n",
      "1457    2015-12-28\n",
      "1458    2015-12-29\n",
      "1459    2015-12-30\n",
      "1460    2015-12-31\n",
      "Name: date, dtype: object\n",
      "1456   2015-12-27\n",
      "1457   2015-12-28\n",
      "1458   2015-12-29\n",
      "1459   2015-12-30\n",
      "1460   2015-12-31\n",
      "Name: date, dtype: datetime64[ns]\n",
      "1456   2015-12-27\n",
      "1457   2015-12-28\n",
      "1458   2015-12-29\n",
      "1459   2015-12-30\n",
      "1460   2015-12-31\n",
      "Name: date, dtype: datetime64[ns]\n",
      "2015\n",
      "1\n",
      "1\n",
      "9\n",
      "8\n",
      "7\n",
      "123456\n",
      "           date  year  month  day\n",
      "1456 2015-12-27  2015     12   27\n",
      "1457 2015-12-28  2015     12   28\n",
      "1458 2015-12-29  2015     12   29\n",
      "1459 2015-12-30  2015     12   30\n",
      "1460 2015-12-31  2015     12   31\n",
      "         date quarter\n",
      "0  2012-01-01  2012Q1\n",
      "1  2012-01-02  2012Q1\n",
      "2  2012-01-03  2012Q1\n",
      "3  2012-01-04  2012Q1\n",
      "4  2012-01-05  2012Q1\n",
      "0   0 days\n",
      "1   1 days\n",
      "2   2 days\n",
      "3   3 days\n",
      "4   4 days\n",
      "Name: date, dtype: timedelta64[ns]\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 1461 entries, 2012-01-01 to 2015-12-31\n",
      "Data columns (total 5 columns):\n",
      " #   Column         Non-Null Count  Dtype  \n",
      "---  ------         --------------  -----  \n",
      " 0   precipitation  1461 non-null   float64\n",
      " 1   temp_max       1461 non-null   float64\n",
      " 2   temp_min       1461 non-null   float64\n",
      " 3   wind           1461 non-null   float64\n",
      " 4   weather        1461 non-null   object \n",
      "dtypes: float64(4), object(1)\n",
      "memory usage: 68.5+ KB\n",
      "            precipitation  temp_max  temp_min  wind weather\n",
      "date                                                       \n",
      "2013-01-01            0.0       5.0      -2.8   2.7     sun\n",
      "2013-01-02            0.0       6.1      -1.1   3.2     sun\n",
      "2013-01-03            4.1       6.7      -1.7   3.0    rain\n",
      "2013-01-04            2.5      10.0       2.2   2.8    rain\n",
      "2013-01-05            3.0       6.7       4.4   3.1    rain\n",
      "...                   ...       ...       ...   ...     ...\n",
      "2013-06-26            2.0      22.2      15.0   2.3    rain\n",
      "2013-06-27            3.6      21.1      16.7   1.3    rain\n",
      "2013-06-28            0.0      30.6      16.1   2.2     sun\n",
      "2013-06-29            0.0      30.0      18.3   1.7     sun\n",
      "2013-06-30            0.0      33.9      17.2   2.5     sun\n",
      "\n",
      "[181 rows x 5 columns]\n",
      "            precipitation  temp_max  temp_min  wind weather\n",
      "date                                                       \n",
      "2015-01-01            0.0       5.6      -3.2   1.2     sun\n",
      "2015-01-02            1.5       5.6       0.0   2.3    rain\n",
      "2015-01-03            0.0       5.0       1.7   1.7     fog\n",
      "2015-01-04           10.2      10.6       3.3   4.5    rain\n",
      "2015-01-05            8.1      12.2       9.4   6.4    rain\n",
      "...                   ...       ...       ...   ...     ...\n",
      "2015-12-27            8.6       4.4       1.7   2.9    rain\n",
      "2015-12-28            1.5       5.0       1.7   1.3    rain\n",
      "2015-12-29            0.0       7.2       0.6   2.6     fog\n",
      "2015-12-30            0.0       5.6      -1.0   3.4     sun\n",
      "2015-12-31            0.0       5.6      -2.1   3.5     sun\n",
      "\n",
      "[365 rows x 5 columns]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [precipitation, temp_max, temp_min, wind, weather]\n",
       "Index: []"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>precipitation</th>\n",
       "      <th>temp_max</th>\n",
       "      <th>temp_min</th>\n",
       "      <th>wind</th>\n",
       "      <th>weather</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 113
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T12:05:06.039407Z",
     "start_time": "2025-09-28T12:05:06.027961Z"
    }
   },
   "cell_type": "code",
   "source": [
    "df = pd.read_csv(\"data/weather.csv\", parse_dates=[0])\n",
    "df_date = pd.to_datetime(df[\"date\"])\n",
    "df[\"timedelta\"] = df_date - df_date[0]  # 得到timedelta64类型的数据\n",
    "df.set_index(\"timedelta\", inplace=True)  # 将timedelta列设置为索引\n",
    "df.info()\n",
    "print(df.loc[\"0 days\":\"5 days\"])"
   ],
   "id": "a4d8dc280079a9c8",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "TimedeltaIndex: 1461 entries, 0 days to 1460 days\n",
      "Data columns (total 6 columns):\n",
      " #   Column         Non-Null Count  Dtype         \n",
      "---  ------         --------------  -----         \n",
      " 0   date           1461 non-null   datetime64[ns]\n",
      " 1   precipitation  1461 non-null   float64       \n",
      " 2   temp_max       1461 non-null   float64       \n",
      " 3   temp_min       1461 non-null   float64       \n",
      " 4   wind           1461 non-null   float64       \n",
      " 5   weather        1461 non-null   object        \n",
      "dtypes: datetime64[ns](1), float64(4), object(1)\n",
      "memory usage: 79.9+ KB\n",
      "                date  precipitation  temp_max  temp_min  wind  weather\n",
      "timedelta                                                             \n",
      "0 days    2012-01-01            0.0      12.8       5.0   4.7  drizzle\n",
      "1 days    2012-01-02           10.9      10.6       2.8   4.5     rain\n",
      "2 days    2012-01-03            0.8      11.7       7.2   2.3     rain\n",
      "3 days    2012-01-04           20.3      12.2       5.6   4.7     rain\n",
      "4 days    2012-01-05            1.3       8.9       2.8   6.1     rain\n",
      "5 days    2012-01-06            2.5       4.4       2.2   2.2     rain\n"
     ]
    }
   ],
   "execution_count": 116
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-09-28T12:06:18.681871Z",
     "start_time": "2025-09-28T12:06:18.661855Z"
    }
   },
   "cell_type": "code",
   "source": [
    "print(pd.date_range(\"2015-07-03\", periods=5, freq=\"h\"))\n",
    "# DatetimeIndex(['2015-07-03 00:00:00', '2015-07-03 01:00:00',\n",
    "#                '2015-07-03 02:00:00', '2015-07-03 03:00:00',\n",
    "#                '2015-07-03 04:00:00'],\n",
    "#               dtype='datetime64[ns]', freq='h')\n",
    "df = pd.read_csv(\"data/weather.csv\")\n",
    "df[\"date\"] = pd.to_datetime(df[\"date\"])\n",
    "df.set_index(\"date\", inplace=True)\n",
    "print(df[[\"temp_max\", \"temp_min\"]].resample(\"YE\").mean())  # 将数据按年分组,并计算每年的平均最高最低温度\n",
    "#              temp_max  temp_min\n",
    "# date\n",
    "# 2012-12-31  15.276776  7.289617\n",
    "# 2013-12-31  16.058904  8.153973\n",
    "# 2014-12-31  16.995890  8.662466\n",
    "# 2015-12-31  17.427945  8.835616\n"
   ],
   "id": "837c76b28dc45cb2",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DatetimeIndex(['2015-07-03 00:00:00', '2015-07-03 01:00:00',\n",
      "               '2015-07-03 02:00:00', '2015-07-03 03:00:00',\n",
      "               '2015-07-03 04:00:00'],\n",
      "              dtype='datetime64[ns]', freq='h')\n",
      "             temp_max  temp_min\n",
      "date                           \n",
      "2012-12-31  15.276776  7.289617\n",
      "2013-12-31  16.058904  8.153973\n",
      "2014-12-31  16.995890  8.662466\n",
      "2015-12-31  17.427945  8.835616\n"
     ]
    }
   ],
   "execution_count": 118
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
